gpt4 book ai didi

java - Jogl 2.2.1 Windows 工作教程?

转载 作者:行者123 更新时间:2023-12-02 05:26:32 25 4
gpt4 key购买 nike

我按照这些步骤来设置和创建我的第一个项目:
setup
tutorial

这是有问题的代码:

主类:

/**
*
*/

package name.wadewalker.tutorial;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.media.opengl.*;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;

/**
* @author PTOSH
*
*/
public class openGL{

/**
* @param args
*/
GLU glu;
public static void main(String[] args) {
// TODO Auto-generated method stub
GLProfile glp = GLProfile.getDefault();
GLProfile.initSingleton();
GLCapabilities CAPS = new GLCapabilities(glp);
GLCanvas CANVAS = new GLCanvas(CAPS);
CANVAS.addGLEventListener(new newLstn());
Frame FRAME = new Frame("AWT WINDOW TEST");
FRAME.setSize(1300, 700);
FRAME.add(CANVAS);
FRAME.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent E){
System.exit(0);
}
});
FRAME.setVisible(true);
}
}

GLEventListener:

package name.wadewalker.tutorial;

import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.fixedfunc.GLMatrixFunc;
import javax.media.opengl.glu.GLU;

public class newLstn implements GLEventListener {
private GL2 gl;
private GLU glu;
@Override
public void display(GLAutoDrawable arg0) {
// TODO Auto-generated method stub
gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
gl.glLoadIdentity();
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
gl.glClearColor(0f,0f,0f,0f);

gl.glBegin(GL.GL_TRIANGLES);
// Font-face triangle
gl.glColor3f(1.0f, 0.0f, 0.0f); // Red
gl.glVertex3f(0.0f, 0.5f, 0.0f);
// gl.glColor3f(0.0f, 1.0f, 0.0f); // Green
gl.glVertex3f(-0.5f, -0.5f, 0.5f);
// gl.glColor3f(0.0f, 0.0f, 1.0f); // Blue
gl.glVertex3f(0.5f, -0.5f, 0.5f);

// Right-face triangle
// gl.glColor3f(1.0f, 0.0f, 0.0f); // Red
gl.glVertex3f(0.0f, 0.5f, 0.0f);
// gl.glColor3f(0.0f, 0.0f, 1.0f); // Blue
gl.glVertex3f(0.5f, -0.5f, 0.5f);
// gl.glColor3f(0.0f, 1.0f, 0.0f); // Green
gl.glVertex3f(0.5f, -0.5f, -0.5f);

// Back-face triangle
// gl.glColor3f(1.0f, 0.0f, 0.0f); // Red
// gl.glVertex3f(0.0f, 1.0f, 0.0f);
// gl.glColor3f(0.0f, 1.0f, 0.0f); // Green
// gl.glVertex3f(1.0f, -1.0f, -1.0f);
// gl.glColor3f(0.0f, 0.0f, 1.0f); // Blue
// gl.glVertex3f(-1.0f, -1.0f, -1.0f);
//
// // Left-face triangle
// gl.glColor3f(1.0f, 0.0f, 0.0f); // Red
// gl.glVertex3f(0.0f, 1.0f, 0.0f);
// gl.glColor3f(0.0f, 0.0f, 1.0f); // Blue
// gl.glVertex3f(-1.0f, -1.0f, -1.0f);
// gl.glColor3f(0.0f, 1.0f, 0.0f); // Green
// gl.glVertex3f(-1.0f, -1.0f, 1.0f);

gl.glEnd();
gl.glFlush();

// ----- Render the Pyramid -----
gl.glLoadIdentity(); // reset the model-view matrix
gl.glTranslatef(-0.6f, 0.0f, 0.0f); // translate left and into the screen
gl.glRotatef(15, -0.2f, 1.0f, 0.0f); // rotate about the y-axis
}
@Override
public void dispose(GLAutoDrawable arg0) {
// TODO Auto-generated method stub

}
@Override
public void init(GLAutoDrawable arg0) {
// TODO Auto-generated method stub
gl = arg0.getGL().getGL2(); // get the OpenGL graphics context
glu = new GLU(); // get GL Utilities
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // set background (clear) color
gl.glClearDepth(1.0f); // set clear depth value to farthest
gl.glEnable(GL.GL_DEPTH_TEST); // enables depth testing
gl.glEnable(GL.GL_CULL_FACE_MODE);
gl.glDepthFunc(GL.GL_LEQUAL); // the type of depth test to do
gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); // best perspective correction
// gl.glShadeModel(0); // blends colors nicely, and smoothes out lighting

}
@Override
public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3,
int arg4) {
// float red = 0.0f; float green = 0.0f; float blue = 0.0f;
////
//// gl = arg0.getGL().getGL2();
////
//// gl.glClear(GL.GL_COLOR_BUFFER_BIT);
////
// gl.glPointSize(5.0f);
//
// for (int i=0; i<50; i++) {
//
// red -= .09f; green -= .12f; blue -= .15f;
//
// if (red < 0.15) red = 1.0f; if (green < 0.15) green = 1.0f; if (blue < 0.15) blue = 1.0f;
//
// gl.glColor3f(red, green, blue);
// gl.glBegin(GL.GL_POINTS); gl.glVertex2i((i*10), 150); gl.glEnd(); }
// TODO Auto-generated method stub
glu.gluPerspective(45.0, 15, 0.1, 100.0); // fovy, aspect, zNear, zFar
}
}

我从教程中获取了源代码并对其进行了修改,我的目的是开始绘制简单的 3D 形状。当我执行代码时出现问题,它显然不是渲染深度。我还注意到该教程适用于 JOGL 2.0,并且代码的某些部分不再工作,例如:“gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);”
所以我必须删除或注释这部分代码才能看到二维形状。如果有人可以向我展示一个好的更新教程的路径,或者给我一些帮助来理解我所面临的问题。感谢您的帮助和努力。

最佳答案

您的显示函数有以下几行:

    gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
gl.glLoadIdentity();
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
gl.glLoadIdentity();

这会将模型 View 和投影矩阵重置为恒等,因此在下面,您将直接在剪辑空间中绘制。这意味着根本不会有透视效果。

在您的reshape回调中,您有

    glu.gluPerspective(45.0, 15, 0.1, 100.0); // fovy, aspect, zNear, zFar

这意味着设置一些透视变换。但当您在显示函数中覆盖该矩阵时,它没有任何效果。然而,你也用错了。 gluPerspective() 会将当前选定的矩阵堆栈的顶部矩阵乘以某种透视变换。

你应该做的是这样的

    gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(45.0, 15, 0.1, 100.0); // fovy, aspect, zNear, zFar
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);

在reshape函数中完全删除

    gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
gl.glLoadIdentity();

来自显示功能。

但是,这不会给出您可能期望的结果。既然你把三角形部分地画出了截锥体,那么。

您的显示函数结束于

      gl.glLoadIdentity();                 // reset the model-view matrix
gl.glTranslatef(-0.6f, 0.0f, 0.0f); // translate left and into the screen
gl.glRotatef(15, -0.2f, 1.0f, 0.0f); // rotate about the y-axis

这段代码根本不做任何事情。你完全误解了 openGL 的工作原理。它不会为您管理 3D 对象,您可以稍后在世界中移动这些对象。它是一个渲染 API。并且OpenGL被设计成一个状态机。您设置了一些渲染状态,这会影响绘制调用的结果。在这里,您设置了一些渲染状态(模型 View 矩阵),但在该状态生效时您不绘制任何内容。您必须在发出要以这种方式显示的对象的绘制校准之前进行这些变换。

请注意,到目前为止我所说的所有内容都在您链接的教程中正确使用。

另一个大问题是您应该意识到此代码完全依赖于已弃用 GL。在现代 GL 中,几乎所有您在这里使用的 GL 函数都消失了。如果你现在正在学习 OpenGL,你真的应该考虑学习现代的方式(现在已经不再那么现代了,我们现在拥有可编程管道已经有十年了)。

关于java - Jogl 2.2.1 Windows 工作教程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25960968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com