Hello, j'ai un soucis que je n'arrive pas a élucider.
J'ai un mesh (rectangle), un autre mesh qui represente ma lumiere et un Vector3f qui est la position de ma lumiere.
je place ma camera a (0.f, 2.f, -5.f).
Je place donc mon mesh au centre ainsi que mon Lightmesh et je set la position de ma lumiere(ogl ou dx) au centre aussi (via le vector3f).
Pour le render, je load ma matrix de model, puis la matrix de projection et je render le mesh principal.
Ensuite je load la matrice de mon LightMesh et je le render.
Le probleme c'est que la zone eclairée n'est pas au centre, je suis obliger de shifter la position de la lumiere de +5.f sur l'axe des Z (l'inverse du placement de ma camera) pour que celle ci eclaire reelement le centre.
Voila a quoi ca ressemble:
Initialisation :
Rendering:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 fMeshLengthAlongX = 10.f; fMeshLengthAlongZ = 10.f; m_CameraPos.Set(0.f, 2.f, -5.f); m_MatView3D.LookAt(m_CameraPos, m_CameraPos + Vector3F(0.0f, -0.0f, 1.0f)); m_MatProj3D.PerspectiveFOV(fPi / 2, 640.0f / 480.0f, 1.0f, 1000.0f); CreateMesh(Vector3F(-m_fMeshLengthAlongX / 2, 0.f, -m_fMeshLengthAlongZ / 2)); CreateLightMesh(Vector3F(0.f, 2.5f, 0.f)); m_LightMatrix.Identity(); // Creation lumiere hardware InitLights(Vector3F(0.f, 2.5f, 5.f)); // Si Z == 0.f, decalage de la lumiere
Ce doit etre une grosse faute de debutant, mais je ne vois pas laquel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Renderer()->LoadMatrix(MODELVIEW, m_Rotation * m_MatView3D); Renderer()->LoadMatrix(PROJECTION, m_MatProj3D); Renderer()->EnableRenderParam(RENDER_ZWRITE, true); Renderer()->SetMaterial(m_Material); m_pMesh->Render(); Renderer()->LoadMatrix(MAT_MODELVIEW, m_LightMatrix * m_Rotation * m_MatView3D); m_pLightMesh->Render();![]()
Partager