Je fais une animation avec JOGL. J'ai besoin de dessiner quelques éléments mais certains d'entre eux sont toujours les mêmes avec les mêmes propriétés et aucun autre objet ne va bouger dans ces régions. C'est pourquoi je suis d'accord avec l'implémentation de glScissor. Donc, mon idée est la suivante: je déclare une variable booléenne comme vraie et je fais une instruction if qui ne sera vraie que pour la première image. À l'intérieur de la déclaration if, j'appelle une fonction qui va peindre tout ce dont j'ai besoin comme constante, puis j'active glScissors. Mon problème est que même si je vois que seulement dans la zone avec des ciseaux, l'image est en train d'être changée, dans la région extérieure, je peux voir un scintillement. C'est comme s'il y avait des cadres noirs entre les autres avec l'image correcte. Pourquoi? Qu'est-ce que je fais mal?glScissors me produit scintillement avec des animations (JOGL)
boolean first = true;
public void init(GLAutoDrawable drawable) {
final GL2 gl = (GL2) drawable.getGL();
// Enable z- (depth) buffer for hidden surface removal.
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glDepthFunc(GL.GL_LEQUAL);
// Enable smooth shading.
gl.glShadeModel(GL2.GL_SMOOTH);
// Define "clear" color.
gl.glClearColor(1f, 1f, 1f, 1f);
// We want a nice perspective.
gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);
// Create GLU.
glu = new GLU();
GLProfile profile = GLProfile.get(GLProfile.GL2);
gl.glPixelStorei(gl.GL_PACK_ALIGNMENT, 1);
}
public void display(GLAutoDrawable drawable) {
final GL2 gl = (GL2) drawable.getGL();
// Clear screen.
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
// Set camera.
setCamera(gl, glu, 30);
// Prepare light parameters.
float SHINE_ALL_DIRECTIONS = 1;
float[] lightPos = {0, 0, 0, SHINE_ALL_DIRECTIONS};
float[] lightColorAmbient = {1f, 1f, 1f, 1f};
float[] lightColorSpecular = {1f, 1f, 1f, 1f};
// Set light parameters.
gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_POSITION, lightPos, 0);
gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_AMBIENT, lightColorAmbient, 0);
gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_SPECULAR, lightColorSpecular, 0);
// Enable lighting in GL.
gl.glEnable(GL2.GL_LIGHT1);
gl.glEnable(GL2.GL_LIGHTING);
if (first==true){
first=false;
//inside plot_constant_object I don't change anything related with lighting
Plot_constant_objects(drawable, gl);
gl.glScissor(100, 100, 500, 500);
gl.glEnable(gl.GL_SCISSOR_TEST);
}
//Draw other stuff
}
Vous ne devriez pas utiliser [OpenGL Obsolète] (https://www.khronos.org/opengl/wiki/Legacy_OpenGL) – elect
Je vous conseille de regarder le travail exemple ici: http://www.java-gaming.org/index.php/topic,13652. En passant, veuillez remplacer "glu = new GLU()" par "glu = GLU.createGLU (gl)". – gouessej
Quelle est la différence goussej? Les deux ont travaillé pour moi (à propos de GLU je veux dire). A propos de cette page, ça n'a pas marché! J'espère avoir trouvé une solution :) –