|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Catscratch1 Junior JLI'ler
Anmeldedatum: 20.01.2005 Beiträge: 98
Medaillen: Keine
|
Verfasst am: 20.03.2005, 15:35 Titel: Licht Problem |
|
|
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 .
Hoffe es gibt hier Managed DirectX Profis
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 |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 20.03.2005, 15:40 Titel: |
|
|
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 |
|
|
Catscratch1 Junior JLI'ler
Anmeldedatum: 20.01.2005 Beiträge: 98
Medaillen: Keine
|
Verfasst am: 20.03.2005, 15:54 Titel: |
|
|
Nein,
das Licht wird schon durch das
device.Lights[0] gesetzt. _________________ "Dispatcher und Scheduler sind wie Brüder, bloß anders" |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 20.03.2005, 16:00 Titel: |
|
|
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 _________________ '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 |
|
|
Catscratch1 Junior JLI'ler
Anmeldedatum: 20.01.2005 Beiträge: 98
Medaillen: Keine
|
Verfasst am: 20.03.2005, 16:04 Titel: |
|
|
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 |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 20.03.2005, 16:07 Titel: |
|
|
- 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 _________________ '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 |
|
|
Catscratch1 Junior JLI'ler
Anmeldedatum: 20.01.2005 Beiträge: 98
Medaillen: Keine
|
Verfasst am: 20.03.2005, 16:16 Titel: |
|
|
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 _________________ "Dispatcher und Scheduler sind wie Brüder, bloß anders" |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
FH Super JLI'ler
Alter: 36 Anmeldedatum: 16.10.2004 Beiträge: 438
Medaillen: Keine
|
Verfasst am: 20.03.2005, 20:18 Titel: |
|
|
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 ), 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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 20.03.2005, 20:36 Titel: |
|
|
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 |
|
|
Catscratch1 Junior JLI'ler
Anmeldedatum: 20.01.2005 Beiträge: 98
Medaillen: Keine
|
Verfasst am: 20.03.2005, 21:16 Titel: |
|
|
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 |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 21.03.2005, 15:22 Titel: |
|
|
Was haben die Materials mit der Beleuchtung zu tun? Bei mir gings immer ohne _________________ "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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 21.03.2005, 15:34 Titel: |
|
|
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 |
|
|
Catscratch1 Junior JLI'ler
Anmeldedatum: 20.01.2005 Beiträge: 98
Medaillen: Keine
|
Verfasst am: 21.03.2005, 18:59 Titel: |
|
|
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 |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 22.03.2005, 11:59 Titel: |
|
|
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 |
|
|
|
|
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
|