JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=828bf9946597d7ab6ac8e29b971c5ba4Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Licht Problem
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 20.03.2005, 15:35    Titel: Licht Problem Antworten mit Zitat

Hallo,

habe ein Problem mit direktionalem Licht.
Ich probier hier schon ne ganze Weile, aber mein texturierter Würfel ist schwarz.

Ich hoffe jemand von euch sieht den Fehler sofort, aber nur wenn er Lust hat Wink.
Hoffe es gibt hier Managed DirectX Profis Wink

CPP:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace Textures
{
   /// <summary>
   /// Summary description for Form1.
   /// </summary>
   public class Form1 : System.Windows.Forms.Form
   {
        private Device device = null;
        private VertexBuffer vb = null;
       
      private Texture tex = null;


      /// <summary>
      /// Required designer variable.
      /// </summary>
      private System.ComponentModel.Container components = null;
        private float angle = 0.0f;

      public Form1()
      {
         //
         // Required for Windows Form Designer support
         //
         InitializeComponent();

            this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
      }

        /// <summary>
        /// We will initialize our graphics device here
        /// </summary>
        public void InitializeGraphics()
        {
            // Set our presentation parameters
            PresentParameters presentParams = new PresentParameters();

            presentParams.Windowed = true;
            presentParams.SwapEffect = SwapEffect.Discard;

            // Create our device
            device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);

            vb = new VertexBuffer(typeof(CustomVertex.PositionNormalTextured), 36, device, Usage.Dynamic | Usage.WriteOnly, CustomVertex.PositionNormalTextured.Format, Pool.Default);
            vb.Created += new EventHandler(this.OnVertexBufferCreate);
            OnVertexBufferCreate(vb, null);
         tex = TextureLoader.FromFile(device,@"..\..\texture00.jpg");//,64,64,7,Usage.Dynamic,Format.R8G8B8,Pool.Default,Filter.Linear,Filter.Linear,0);
         CreateMipMapTexture();
           
        }

      private void CreateMipMapTexture()
      {

         for(int i = 1; i<7;i++)
         {
            Surface destSurface = tex.GetSurfaceLevel(i);
            String dest = @"..\..\texture0"+Convert.ToString(i)+".jpg";
            SurfaceLoader.FromFile(destSurface,dest,Filter.Linear,0);
         }
      }



        private void OnVertexBufferCreate(object sender, EventArgs e)
        {
            VertexBuffer buffer = (VertexBuffer)sender;

            CustomVertex.PositionNormalTextured[] verts = new CustomVertex.PositionNormalTextured[36];

            // Front face
            verts[0] = new CustomVertex.PositionNormalTextured(-1.0f, 1.0f, 1.0f,0,0,1, 0.0f, 0.0f);
            verts[1] = new CustomVertex.PositionNormalTextured(-1.0f, -1.0f, 1.0f, 0,0,1,0.0f, 1.0f);
            verts[2] = new CustomVertex.PositionNormalTextured(1.0f, 1.0f, 1.0f, 0,0,1,1.0f, 0.0f);
            verts[3] = new CustomVertex.PositionNormalTextured(-1.0f, -1.0f, 1.0f, 0,0,1,0.0f, 1.0f);
            verts[4] = new CustomVertex.PositionNormalTextured(1.0f, -1.0f, 1.0f,0,0,1, 1.0f, 1.0f);
            verts[5] = new CustomVertex.PositionNormalTextured(1.0f, 1.0f, 1.0f, 0,0,1,1.0f, 0.0f);

            // Back face (remember this is facing *away* from the camera, so vertices should be clockwise order)
            verts[6] = new CustomVertex.PositionNormalTextured(-1.0f, 1.0f, -1.0f, 0,0,-1,0.0f, 0.0f);
            verts[7] = new CustomVertex.PositionNormalTextured(1.0f, 1.0f, -1.0f, 0,0,-1,1.0f, 0.0f);
            verts[8] = new CustomVertex.PositionNormalTextured(-1.0f, -1.0f, -1.0f,0,0,-1, 0.0f, 1.0f);
            verts[9] = new CustomVertex.PositionNormalTextured(-1.0f, -1.0f, -1.0f,0,0,-1, 0.0f, 1.0f);
            verts[10] = new CustomVertex.PositionNormalTextured(1.0f, 1.0f, -1.0f, 0,0,-1,1.0f, 0.0f);
            verts[11] = new CustomVertex.PositionNormalTextured(1.0f, -1.0f, -1.0f, 0,0,-1,1.0f, 1.0f);

            // Top face
            verts[12] = new CustomVertex.PositionNormalTextured(-1.0f, 1.0f, 1.0f, 0,1,0,0.0f, 0.0f);
            verts[13] = new CustomVertex.PositionNormalTextured(1.0f, 1.0f, -1.0f, 0,1,0,1.0f, 1.0f);
            verts[14] = new CustomVertex.PositionNormalTextured(-1.0f, 1.0f, -1.0f, 0,1,0,0.0f, 1.0f);
            verts[15] = new CustomVertex.PositionNormalTextured(-1.0f, 1.0f, 1.0f, 0,1,0,0.0f, 0.0f);
            verts[16] = new CustomVertex.PositionNormalTextured(1.0f, 1.0f, 1.0f, 0,1,0,1.0f, 0.0f);
            verts[17] = new CustomVertex.PositionNormalTextured(1.0f, 1.0f, -1.0f, 0,1,0,1.0f, 1.0f);

            // Bottom face (remember this is facing *away* from the camera, so vertices should be clockwise order)
            verts[18] = new CustomVertex.PositionNormalTextured(-1.0f, -1.0f, 1.0f, 0,-1,0,0.0f, 0.0f);
            verts[19] = new CustomVertex.PositionNormalTextured(-1.0f, -1.0f, -1.0f, 0,-1,0,0.0f, 1.0f);
            verts[20] = new CustomVertex.PositionNormalTextured(1.0f, -1.0f, -1.0f, 0,-1,0,1.0f, 1.0f);
            verts[21] = new CustomVertex.PositionNormalTextured(-1.0f, -1.0f, 1.0f, 0,-1,0,0.0f, 0.0f);
            verts[22] = new CustomVertex.PositionNormalTextured(1.0f, -1.0f, -1.0f, 0,-1,0,1.0f, 1.0f);
            verts[23] = new CustomVertex.PositionNormalTextured(1.0f, -1.0f, 1.0f, 0,-1,0,1.0f, 0.0f);

            // Left face
            verts[24] = new CustomVertex.PositionNormalTextured(-1.0f, 1.0f, 1.0f, -1,0,0,0.0f, 0.0f);
            verts[25] = new CustomVertex.PositionNormalTextured(-1.0f, -1.0f, -1.0f, -1,0,0,1.0f, 1.0f);
            verts[26] = new CustomVertex.PositionNormalTextured(-1.0f, -1.0f, 1.0f, -1,0,0,1.0f, 0.0f);
            verts[27] = new CustomVertex.PositionNormalTextured(-1.0f, 1.0f, -1.0f, -1,0,0,0.0f, 1.0f);
            verts[28] = new CustomVertex.PositionNormalTextured(-1.0f, -1.0f, -1.0f, -1,0,0,1.0f, 1.0f);
            verts[29] = new CustomVertex.PositionNormalTextured(-1.0f, 1.0f, 1.0f, -1,0,0,0.0f, 0.0f);

            // Right face (remember this is facing *away* from the camera, so vertices should be clockwise order)
            verts[30] = new CustomVertex.PositionNormalTextured(1.0f, 1.0f, 1.0f,1,0,0, 0.0f, 0.0f);
            verts[31] = new CustomVertex.PositionNormalTextured(1.0f, -1.0f, 1.0f, 1,0,0,1.0f, 0.0f);
            verts[32] = new CustomVertex.PositionNormalTextured(1.0f, -1.0f, -1.0f, 1,0,0,1.0f, 1.0f);
            verts[33] = new CustomVertex.PositionNormalTextured(1.0f, 1.0f, -1.0f, 1,0,0,0.0f, 1.0f);
            verts[34] = new CustomVertex.PositionNormalTextured(1.0f, 1.0f, 1.0f, 1,0,0,0.0f, 0.0f);
            verts[35] = new CustomVertex.PositionNormalTextured(1.0f, -1.0f, -1.0f, 1,0,0,1.0f, 1.0f);

            buffer.SetData(verts, 0, LockFlags.None);
        }

        private void SetupCamera()
        {
            device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, this.Width / this.Height, 1.0f, 100.0f);
            device.Transform.View = Matrix.LookAtLH(new Vector3(0,0, 48.0f), new Vector3(), new Vector3(0,1,0));
            device.Lights[0].Type = LightType.Directional;
         device.Lights[0].Diffuse = Color.White;
         device.Lights[0].Direction = new Vector3(0,1,0);
         device.Lights[0].Enabled = true;
         device.RenderState.Lighting = true;
        }

        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
        {
            device.Clear(ClearFlags.Target, Color.CornflowerBlue, 1.0f, 0);

            SetupCamera();

            device.BeginScene();
            device.VertexFormat = CustomVertex.PositionNormalTextured.Format;
            device.SetStreamSource(0, vb, 0);
         device.SamplerState[0].MipFilter = TextureFilter.Linear;

            // Draw our boxes
            DrawBox(0.0f, 20.0f, 0.0f, tex);
            device.EndScene();

            device.Present();

            this.Invalidate();
        }

        private void DrawBox(float x, float y, float z, Texture t)
        {
            angle += 0.01f;

            device.Transform.World = Matrix.Translation(x, y, z)*Matrix.RotationX(angle);
            device.SetTexture(0, t);
            device.DrawPrimitives(PrimitiveType.TriangleList, 0, 12);
        }

      /// <summary>
      /// Clean up any resources being used.
      /// </summary>
      protected override void Dispose( bool disposing )
      {
         if( disposing )
         {
            if (components != null)
            {
               components.Dispose();
            }
         }
         base.Dispose( disposing );
      }

      #region Windows Form Designer generated code
      /// <summary>
      /// Required method for Designer support - do not modify
      /// the contents of this method with the code editor.
      /// </summary>
      private void InitializeComponent()
      {
         this.components = new System.ComponentModel.Container();
         this.Size = new Size(800,600);
         this.Text = "Form1";
      }
      #endregion

      /// <summary>
      /// The main entry point for the application.
      /// </summary>
        static void Main()
        {
            using (Form1 frm = new Form1())
            {
                // Show our form and initialize our graphics engine
                frm.Show();
                frm.InitializeGraphics();
                Application.Run(frm);
            }
        }
   }
}

_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 20.03.2005, 15:40    Titel: Antworten mit Zitat

Da fehlt glaub ich das SetLight(); in deiner SetUpCamera-Funktion.
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 20.03.2005, 15:54    Titel: Antworten mit Zitat

Nein,

das Licht wird schon durch das

device.Lights[0] gesetzt.
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 20.03.2005, 16:00    Titel: Antworten mit Zitat

Grauenhafter Code. Kein Wunder das ich C# in den Müll gekloppt habe.

Auf meiner Arbeit gibt es jemanden der richtiger Pro darin ist, ich frag den Morgen mal danach wenn er Zeit hat.

- Patrick, der C++ ordentlicher findet als diesen Schund da Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 20.03.2005, 16:04    Titel: Antworten mit Zitat

Ja, der Code ist doof.

Aber ich will nur schaun, ob das geht, aber es will nicht.

Wird alles optimiert, wenn das blöde Licht tut!

Wie würde man denn in C++ einen Würfel mit einer Textur und Normalen definieren?
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 20.03.2005, 16:07    Titel: Antworten mit Zitat

- Vertexbuffer erstellen und füllen mit den Daten für Vertices, Normalen und Texturkoordinaten
- Indexbuffer erstellen (bringt mehr Speed bei viel Geometrie)
- rendern mit FVF für Position,Normale,Textur1

Fertig.

ist ein aufwand von ca. 10 Zeilen Code. Die 2 Buffer sind nur 2 Instanzen. Also wirklich viel schmucker als diesen BaBa da Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 20.03.2005, 16:16    Titel: Antworten mit Zitat

Prinzipiell hab ich da oben dasselbe. Außer den IndexBuffer.
Das wäre mein zweiter Schritt gewesen.

Aber das nervt, wenn man nicht weiß, woran das liegt. Weder Directional noch Ambient Light funktioniert. Ich seh nur was, wenn ich das Licht ausmachen Wink
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 20.03.2005, 16:17    Titel: Antworten mit Zitat

Die DX-Doku hat sehr viele Papers intern zum Thema Licht, vorallem wie es Funktioniert, was was ist usw.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
FH
Super JLI'ler


Alter: 36
Anmeldedatum: 16.10.2004
Beiträge: 438

Medaillen: Keine

BeitragVerfasst am: 20.03.2005, 20:18    Titel: Antworten mit Zitat

Ich hab nur C# gelernt, also von Managed DX keine Ahnung, nicht mal, wie man ein Windows-Window erzeugt... Aber trotzdem:
Du hast CustomVertex net mitgeliefert (oder ich habs übersehen). Ich hoffe mal, du hast net den Anfängerfehler gemacht (der mir auch schon öfters passiert ist Wink ), und die Normalvektoren vergessen...
Gruß

FH
_________________
goto work, send your kids to school
follow fashion, act normal
walk on the pavement, watch T.V.
save for your old age, obey the law
Repeat after me: I am free
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 20.03.2005, 20:36    Titel: Antworten mit Zitat

Normalen sind da. Das einzige was mir grade einfällt ist das er evtl falsche TextureStages gesetzt hat. Im Code hat er zwar keine benutzt, kann aber sein das die dadurch eben noch andere Parameter haben.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 20.03.2005, 21:16    Titel: Antworten mit Zitat

Hab den Fehler gefunden.
Es war alles richtig. Es haben nur die Materials gefehlt!!!!

Code:

Material material = new Material();
material.Diffuse = material.Ambient = Color.White;

device.Material = material;


Jetzt tuts wie es soll!
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 21.03.2005, 15:22    Titel: Antworten mit Zitat

Question

Was haben die Materials mit der Beleuchtung zu tun? Bei mir gings immer ohne Shocked
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 21.03.2005, 15:34    Titel: Antworten mit Zitat

häh? Bei mir gings auch immer nur MIT Material.

Das Material liefert eine ganze Zahl an wichtigen Informationen. Es bestimmt zum Beispiel, ob ein Objekt glänzt oder nicht, und wenn ja in welcher Farbe.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 21.03.2005, 18:59    Titel: Antworten mit Zitat

Japp,

habe gelesen, dass Licht nur von Material reflektiert wird und nicht von der Textur.
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 22.03.2005, 11:59    Titel: Antworten mit Zitat

Trotzdem reichen doch Normalen und Vertexfarben? Und Tex1?
Theoretisch und praktisch, sieher ds Beispielprogramm "Lights" aus dem Buch.
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum