Написах няколко приложения за Android, но това е първият ми опит с 3D програмиране.
Създадох стая (4 стени, таван и под) с няколко предмета вътре и мога да движа камерата около нея, сякаш вървя. Текстурирах всички повърхности с различни изображения и всичко работи според очакванията.
За контекст, стаята е 14 единици широка и 16 единици дълбока (центрирана в началото), 3 единици висока (1 над началната точка и 2 под). В средата на стаята има 2 предмета, куб и обърната пирамида върху него.
След това добавих източник на светлина, за да засенча куба и пирамидата. Бях прочел и следвах няколко порта на NeHe, така че взех това, което имах в урока за осветлението, и го приложих към моя нов код.
gl.glEnable(GL10.GL_LIGHTING);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, new float[] { 0.1f, 0.1f, 0.1f, 1f }, 0);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, new float[] { 1f, 1f, 1f, 1f }, 0);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, new float[] { -4f, 0.9f, 6f, 1f }, 0);
gl.glEnable(GL10.GL_LIGHT0);
Резултатът е, че кубът и пирамидата не са засенчени. Те изглеждат по същия начин от страните, противоположни на светлината, както и от страните, обърнати към нея. Когато камерата е насочена директно встрани от източника на светлина, стаята изглежда така, както преди да добавя кода за осветление. Когато завъртя камерата към източника на светлина, цялата стая (включително обектите) става по-тъмна до пълно черно, когато камерата е обърната директно към източника.
какво става тук Прочетох много статии за осветлението и как работи, но не видях нищо, което да показва защо това не би осветило всички страни на стаята, като кубът и пирамидата са засенчени въз основа на позицията на светлината. Има ли някакво очаквано поведение на светлината, защото е "вътре" в стаята? Просто пропускам нещо лесно, защото съм нов?