У меня проблема с кросс-платформенным приложением, использующим JOGL, и я решаю разные вещи, но никто из них не работал. Начнем с того, что это какой-то код, чтобы показать вам, как я сделать свою сцену (без бесполезного кода для вас):Проблемы с подсветкой на Windows
Метод отображения:
public void display(GLAutoDrawable drawable)
{
// TODO Auto-generated method stub
GL2 gl = drawable.getGL().getGL2();
setLighting(gl);
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
// matrice definition MODELVIEW from camera matrice
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadMatrixf(this.camera.getCameraMatrix());
gl.glDepthFunc(GL.GL_LEQUAL);
gl.glEnable(GL2.GL_NORMALIZE);
gl.glEnableClientState(GL2.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL2.GL_COLOR_ARRAY);
/*** Voxels Drawing */
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo[0]);
gl.glVertexPointer(3, GL.GL_FLOAT, 0, 0);
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo[1]);
gl.glColorPointer(4, GL.GL_FLOAT, 0, 0);
gl.glBindBuffer(GL.GL_ELEMENT_ARRAY_BUFFER, vbo[2]);
gl.glEnable(GL.GL_BLEND);
gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
gl.glDrawElements(GL2.GL_QUADS, numberVertToDraw, GL.GL_UNSIGNED_INT, 0);
gl.glDisable(GL.GL_BLEND);
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
}
метод SetLighting:
private void setLighting(GL2 gl)
{
gl.glPushMatrix();
gl.glLoadIdentity();
float[] lightPos = new float[4];
lightPos[0] = 15;
lightPos[1] = 25;
lightPos[2] = 15;
lightPos[3] = 1;
gl.glEnable(GL2.GL_LIGHTING);
gl.glEnable(GL2.GL_LIGHT0);
float[] noAmbient ={ 0.8f, 0.8f, 0.8f, 1f }; // low ambient light
float[] spec = { 0.8f, 0.8f, 0.8f, 1f }; // low ambient light
float[] diffuse ={ 0.2f, 0.2f, 0.2f, 1f };
float[] rgba = {0f, 0f, 0f};
gl.glMaterialfv(GL.GL_FRONT, GL2.GL_AMBIENT, rgba, 0);
gl.glMaterialfv(GL.GL_FRONT, GL2.GL_SPECULAR, rgba, 0);
gl.glMaterialf(GL.GL_FRONT, GL2.GL_SHININESS, 1f);
FloatBuffer Light1Dir = Buffers.newDirectFloatBuffer(new float[]{-1,-1,-1});
FloatBuffer exponent = Buffers.newDirectFloatBuffer(new float[]{5}); // properties of the light
gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_AMBIENT, noAmbient, 0);
gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_SPECULAR, spec, 0);
gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_DIFFUSE, diffuse, 0);
gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_POSITION, lightPos, 0);
gl.glLighti(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_SPOT_CUTOFF, 50);
gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_SPOT_DIRECTION, Light1Dir);
gl.glLightfv(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_SPOT_EXPONENT, exponent);
gl.glLightf(GLLightingFunc.GL_LIGHT0, GLLightingFunc.GL_CONSTANT_ATTENUATION, 1f);
gl.glLightf(GLLightingFunc.GL_LIGHT0,GLLightingFunc. GL_LINEAR_ATTENUATION, 0f);
gl.glLightf(GLLightingFunc.GL_LIGHT0,GLLightingFunc. GL_QUADRATIC_ATTENUATION, 0f);
gl.glPopMatrix();
}
Итак, вот моя проблема: я экспортирую банку, чтобы иметь кросс-платформенное приложение. Я тестирую свою виртуальную машину Linux, и в моей Linux-системе все работает, как в моей среде IDE (Eclipse). Но когда я пытаюсь использовать Windows, нет светового рендера.
На самом деле, я сделал несколько тестов, изменяя материал света, и когда я приближаюсь к свету, его изменение цвета. Итак, свет здесь, но он светится везде с той же интенсивностью. Мои тесты приводят к функции ATTENUATION (последнее дерево setLighting). Эта функция не влияет на Windows, или она имеет, но Windows перезагружает ее в какой-то момент, я не знаю.
Я очень быстро тестирую Mac и поэтому отредактировал этот пост.
У кого-то есть идея? Я не использую шейдеры, потому что у меня нет времени учиться, это для профессиональной цели, но я знаю, что когда-нибудь буду. Я действительно не могу найти, как решить эту проблему, и я ничего не нашел в Сети ...
Спасибо всем за это!
PS: Это мой первый пост, и мой французский, так что извините, если я сделал что-то неправильно в отношении правил форума, и простите за мой в конечном итоге плохой английский =)
EDIT: Я только что сделал тест на Mac, и затухание работает так же, как должно работать. Проблемы только на Windows ...
О да, я не видел эту линию, извините! Действительно, я попробовал банку в других окнах, и у меня не было проблем, это должно произойти от моего водителя. Спасибо за ссылки, я посмотрю на это. – AlEmerich