Aktuelle Zeit: 29.04.2024, 15:33

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Grafik auf 3d Position
BeitragVerfasst: 02.04.2007, 13:38 
Offline

Registriert: 02.04.2007, 13:08
Beiträge: 11
Hi
wie kann ich in Irrlicht (1.3) eine Grafik (*.png) auf einer vector3d Position halbtransparent darstellen?
also wie nen fade in/out nur halt für ne Grafik

mfg Bash


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 02.04.2007, 15:18 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
also erst mal: wie willst du die grafik im dreidimensionalen denn darstellen, als grafik die stets zur kamera gewendet ist (billboard) oder als statische "wand" oder soll sie immer gleich groß sein wie ein HUD oder wie.. ????

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 02.04.2007, 16:28 
Offline

Registriert: 02.04.2007, 13:08
Beiträge: 11
jor also sie sollte wie ne statische "wand" dargestellt werden
und nein sie sollte nicht immer gleich gross sein


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 02.04.2007, 17:20 
Offline
Moderator

Registriert: 26.03.2007, 20:06
Beiträge: 114
Du musst dir ein Mesh aus 2 Dreiecken basteln. Die kannst du ausrichten wie du willst, die Erstellung musst du allerdings selber regeln. Dann kannst du das ganze mit einem transparenten Material rendern. (Dokumentation: Materialsystem)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 03.04.2007, 12:49 
Offline

Registriert: 02.04.2007, 13:08
Beiträge: 11
erstmal danke für eure hilfe

also das mit den 2 dreiecken und der textur ist ja nicht das problem
das funktioniert ja schonmal

Code:
    Friend Class IrrVertices
        Public verts() As Vertex3D = {New Vertex3D(), New Vertex3D(), _
            New Vertex3D(), New Vertex3D()}
    End Class

    Private smgr As ISceneManager
    Private driver As IVideoDriver
    Private Material As Material = New Material()
    Private indices() As System.UInt16 = {0, 2, 3, 2, 1, 3, 1, 0, 3, 2, 0, 1}

    Sub Init()
        driver = device.VideoDriver
        Material = New Material()
    End Sub

    Sub Render()
        Material.Wireframe = False
        Material.Lighting = False
        Material.ZBuffer = False
        Material.MaterialTypeParam = MaterialType.TRANSPARENT_ALPHA_CHANNEL
        Material.Texture1 = driver.GetTexture(strMediaPath + "irrlichtlogoalpha2.tga")

        Dim Quad As IrrVertices = New IrrVertices()
        Dim White As New Video.Color(255, 255, 255, 255)
        Quad.verts(0) = New Vertex3D(New Vector3D(0, 0, 0), New Vector3D(-1, -1, -1), _
                        White, New Vector2D(0, 1))
        Quad.verts(1) = New Vertex3D(New Vector3D(1, 0, 0), New Vector3D(1, -1, -1), _
                        White, New Vector2D(1, 1))
        Quad.verts(2) = New Vertex3D(New Vector3D(1, 1, 0), New Vector3D(1, 1, -1), _
                        White, New Vector2D(1, 0))
        Quad.verts(3) = New Vertex3D(New Vector3D(0, 1, 0), New Vector3D(-1, 1, -1), _
                        White, New Vector2D(0, 0))

        driver.SetMaterial(Material)
        driver.DrawIndexedTriangleList(Quad.verts, 4, indices, 4)
    End Sub


aber wie bring ich jetzt meiner textur die transparenz bei? (wie bei nem fade in/out)
und wieso werden bei mir die transparenten stellen der textur schwarz dargestellt?

mfg


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 03.04.2007, 14:42 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
versuch mal transparent_add_color.

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 10.04.2007, 15:53 
Offline

Registriert: 02.04.2007, 13:08
Beiträge: 11
danke für den tipp
doch leider hatte dieser auch nicht den von mir gewünschten effekt
es wird zwar jetzt zum teil transparent angezeigt aber es sieht halt nicht so aus wie es soll (transparentz kann nicht gesteuert werden)

gibt es noch eine andere möglichkeit ein bild mit transparenz auf einer 3d pos. darzustellen ?

achso ... und linien die ich mit Draw3DLine zeichne werden ebenfalls mit keiner transparenz dargestellt aber bei draw2dline funktionierts halt ...

mfg bash

Code:

using System;
using System.Text;
using System.IO;

using Irrlicht;
using Irrlicht.Video;
using Irrlicht.GUI;
using Irrlicht.Core;
using Irrlicht.Scene;

namespace Test_01
{
    class Program1
    {
        class IrrVertices
        {
            public Vertex3D[] verts = { new Vertex3D(), new Vertex3D(), new Vertex3D(), new Vertex3D() };
        };

        [STAThread]
        static void Main(string[] args)
        {
            IrrlichtDevice device = new IrrlichtDevice(DriverType.DIRECT3D9);

            ICameraSceneNode cam =
            device.SceneManager.AddCameraSceneNode(null, new Vector3D(0, 0, 0), new Vector3D(0, 0, 0), -1);
            cam.Position = new Vector3D(0, 0, -2);

            ITexture Logo = device.VideoDriver.GetTexture(@"../../media/irrlichtlogoalpha2.tga");
           
            device.CursorControl.Visible = false;
            IVideoDriver driver = device.VideoDriver;

            //ISceneManager smgr;
            Material mat = new Material();
            driver = device.VideoDriver;
            ushort[] indices = { 0, 2, 3, 2, 1, 3, 1, 0, 3, 2, 0, 1 };

            while (device.Run())
            {
                if (device.WindowActive)
                {
                    device.VideoDriver.BeginScene(true, true, new Color(255, 0, 255, 0));
                    device.SceneManager.DrawAll();
               
                    driver.SetTransform(TransformationState.WORLD , new Matrix4());
                    Irrlicht.Video.Material m = new Material();
                 
                    driver.SetTransform(TransformationState.WORLD, new Matrix4());
                    mat.Wireframe = false;
                    mat.Lighting = false;
                    //mat.ZBuffer = false;
                    //mat.ZWriteEnable = false;
                    //mat.BackfaceCulling = false; 
                    mat.Type = MaterialType.TRANSPARENT_ADD_COLOR;
                    //mat.Type = MaterialType.TRANSPARENT_ALPHA_CHANNEL;   
                    //mat.Type = MaterialType.TRANSPARENT_VERTEX_ALPHA   ;

                    mat.Texture1 = driver.GetTexture("../../Media/irrlichtlogoalpha2.tga");
                    IrrVertices Quad = new IrrVertices();
                    Color White = new Color(130, 255, 255, 255);
                    Quad.verts[0] = new  Vertex3D(new Vector3D(0, 0, 0), new Vector3D(-1, -1, -1), White, new  Vector2D(0, 1));
                    Quad.verts[1] = new Vertex3D(new Vector3D(1, 0, 0), new Vector3D(1, -1, -1), White, new Vector2D(1, 1));
                    Quad.verts[2] = new  Vertex3D(new  Vector3D(1, 1, 0), new Vector3D(1, 1, -1), White, new  Vector2D(1, 0));
                    Quad.verts[3] = new Vertex3D(new Vector3D(0, 1, 0), new Vector3D(-1, 1, -1), White, new Vector2D(0, 0));
                   
                    driver.SetMaterial(mat);
                    driver.DrawIndexedTriangleList(Quad.verts, 4, indices, 4);

                    //device.VideoDriver.Draw2DImage(Logo, new Position2D(200, 80), new Rect(0, 0, Logo.Size.Height, Logo.Size.Width), new Rect(new Position2D(0, 0), device.VideoDriver.ScreenSize), new Color(255, 255, 255, 255), true);
                    //device.VideoDriver.Draw2DImage(Logo, new Position2D(220, 100), new Rect(0, 0, Logo.Size.Height, Logo.Size.Width), new Rect(new Position2D(0, 0), device.VideoDriver.ScreenSize), new Color(50, 255, 255, 255), true);

                    device.VideoDriver.EndScene();                 
                }
            }
        }
    }
}


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 11.04.2007, 02:10 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
ich bin grad zu müde ums auszuprobieren, aber ein vertex hat ein attribut color, also könnte man doch bei alles vertices per vertex.Color.setAlpha die transparenz setzen, der materialtyp emt_transparent_vertex_aplha unterstützt das... glaub ich.. gnaar, morgen...
:matsch:

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 12.04.2007, 16:55 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
soo ich habs mal probiert und voila:
Code:
#include "irrlicht.h"

using namespace irr;
using namespace scene;
using namespace video;
using namespace core;

int main(){
    IrrlichtDevice* device = createDevice(EDT_OPENGL);
    ISceneManager* smgr = device->getSceneManager();
    IVideoDriver*  driver = device->getVideoDriver();
   
    ICameraSceneNode* cam = smgr->addCameraSceneNode(0, vector3df(0,0,-2), vector3df());
   
    device->getCursorControl()->setVisible(false);

    SMaterial mat = SMaterial();
    mat.Lighting = false;
    mat.MaterialType = EMT_TRANSPARENT_VERTEX_ALPHA;
    mat.Texture1 = driver->getTexture("media/wall.bmp");

    SColor c = SColor(150,255,255,255);
   
    S3DVertex verts[] = { S3DVertex(vector3df(0, 0, 0), vector3df(-1, -1, -1), c, vector2df(0, 1)),
                          S3DVertex(vector3df(1, 0, 0), vector3df(1, -1, -1), c, vector2df(1, 1)),
                          S3DVertex(vector3df(1, 1, 0), vector3df(1, 1, -1), c, vector2df(1, 0)),
                          S3DVertex(vector3df(0, 1, 0), vector3df(-1, 1, -1), c, vector2df(0, 0))
                        };
   
    u16 indices[] = { 0, 2, 3, 2, 1, 3, 1, 0, 3, 2, 0, 1 };

    while(device->run())
    {
          if (device->isWindowActive())
          {
             driver->beginScene(true, true, SColor(0, 0, 120, 0));
             smgr->drawAll();
               
             driver->setMaterial(mat);
             driver->drawIndexedTriangleList(&verts[0], 4, &indices[0], 4);

             driver->endScene();                 
         }
    }
    device->drop();
}

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16.04.2007, 14:24 
Offline

Registriert: 02.04.2007, 13:08
Beiträge: 11
funktioniert ja schonmal super
gibt es jetzt noch eine möglichkeit das der alphachannel mit berücksichtigt wird ?
also damit es so wie bei
Code:
driver->draw2DImage(driver->getTexture("irrlichtlogoalpha2.tga"), core::position2d<int>(10,10),core::rect<s32>(0,0,120,120),0, video::SColor(150,255,255,255),true);

aussieht


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16.04.2007, 17:29 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
nach 2 sek nachdenken: mehrere materialien... ka später denk ich nochmal drüber..

_________________
yo. life's so bloody short.
Ihr dachtet Schulfernsehn sei die ultimative Folter? Falsch: Fahrstuhlmusik, extra leise.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 16.04.2007, 17:39 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
Bash hat geschrieben:
funktioniert ja schonmal super
gibt es jetzt noch eine möglichkeit das der alphachannel mit berücksichtigt wird ?
also damit es so wie bei
Code:
driver->draw2DImage(driver->getTexture("irrlichtlogoalpha2.tga"), core::position2d<int>(10,10),core::rect<s32>(0,0,120,120),0, video::SColor(150,255,255,255),true);

aussieht


Du brauchst eben ein Dateiformat, welches Alpha unterstützt (z.B. PNG). Wenn du dann noch den Parameter useAlphaChannelOfTexture auf true setzt, müsste es klappen.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de