- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我按照这些步骤来设置和创建我的第一个项目:
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);
}
}
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/
我一定是愚蠢之类的,但我在网上查看了几个 JOGL 示例,它们在 JOGL 中使用了 GL 接口(interface)的 color3f 方法,但是编译器提示找不到该方法,当我检查时javadoc我确
我从 here 下载了 jogl 2.0 ,文件 jogl-all.jar ,并运行了一个取自 here 的简单代码示例: import java.awt.event.KeyEvent; import
嗨,大家好 我在 JOGL 项目中添加拾取对象时遇到了麻烦。 我知道这可以通过选择缓冲区来完成..但我找不到例子 任何人? 最佳答案 一般来说,正如您可能知道的那样,JOGL 代码直接从您可能在网络上
我找不到有关在 JOGL 中呈现交错顶点数组(不是 VBO)的正确方法的任何信息。具体来说,使用 glVertexAttribPointer() 似乎不允许指定交错数据(FloatBuffer)内的偏
鉴于我从 JOGAMP wiki 获得的这个简单示例,为什么鼠标坐标在 y 方向上偏离 40,在 x 方向上偏离 20?单击屏幕右下角会显示坐标 (620, 440),而不是像我期望的那样 (640,
我正在学习使用 JOGL,在学习本教程时遇到了问题: https://sites.google.com/site/justinscsstuff/jogl-tutorial-1 https://site
我目前正在通过使用 JOGL 库(openGL 的 java 包装器)来探索 opengl,我用它来创建 2d/3d 图形。目前,我对通过“glutBitmapString”方法渲染的文本遇到了一些问
我在我的应用程序中使用 JOGL(OpenGL for Java),我需要一次在屏幕上绘制大量字符串,而我当前的解决方案太慢了。现在,我正在使用 Draw3D 方法使用 TextRenderer 绘制
我在使用 JOGL 时遇到问题。我这里有一本书用 C++ 解释了 OpenGL,但我的任务是用 JOGL 来做。我现在正在处理顶点缓冲区对象,这本书告诉我这一点: glGenBuffers(1, &m
我一直在尝试在独立的 Java 应用程序中使用 JOGL。我已经在 Android 上完成了 OpenGLES 的工作,并且刚刚将我的代码从 Android OpenGL 移植到了这个 Java 应用
我正在使用 JOGL 将 OpenGL SuperBible 演示翻译成 Java。第 12 章之前的所有演示都很顺利,但现在我陷入了阴影贴图。这是我的设置: public class ShadowM
我是 OpenGL 的新手,正在尝试使用 jogl。我可以毫无问题地绘制三角形,但是当我尝试绘制四边形(在许多教程中使用)时,Eclipse 一直告诉我 GL.GL_QUADS 无法解析。 gl.gl
我正在 JOGL 中构建一些东西,并且希望通过使用键盘或鼠标来使相机移动,这并不重要,只要相机可以围绕对象平移并可能放大和缩小即可。如果使用键盘/鼠标很困难,那么我也不介意使用应用程序中的某些按钮,例
我的问题是关于jogl的。我在 Canvas 显示中绘制图像。但我在图像上绘制多边形。我画多边形,但多边形是透明的,而不是颜色的。我可以做吗? gl.glBlendFunc(GL.GL_SRC_AL
我一直在尝试加载一个 bmp 图片以在我的程序中将其用作纹理 我使用了一个 IOStream 类来扩展 DataInputStream 以读取像素在照片中,此代码基于 C++ 的纹理加载器代码: //
在我的项目中,我希望为不同的对象使用一些纹理。 目前我有以下代码: private Texture[] textures = new Texture[1]; private int texture1
我已经使用 JOGL 几天了,现在这已成为一个主要障碍。我无法让形状以正确的 z 顺序绘制,而是按照它们提供给 OpenGL 的顺序绘制。 我花了最后几个小时研究这个问题,一般的解决方案(和我的 re
我正在尝试将 C# 应用程序移植到 Java,目前正在翻译 OpenGL 代码。在 C# 应用程序中使用了 OpenTK,在 Java 应用程序中我选择了 JOGL。当我尝试创建纹理时,程序抛出异常。
我最近才开始使用 JOGL,但我的第一个程序失败了,因为我无法获得 GL4 配置文件。 GLProfile test = GLProfile.get(GLProfile.GL4); 此行失败并显示错误
我正在使用 JOGL 渲染一些模型。我可以实现 KeyListener 接口(interface)并相应地接收击键。但问题是,按键后我无法再次刷新或渲染模型。我可以接收输入,但如何在 JOGL 中每次
我是一名优秀的程序员,十分优秀!