OpenGL使用2次幂纹理.这是因为由于MipMapping,一些GPU仅接受2次幂纹理.在绘制比它大的纹理时,使用这些2次幂纹理会导致问题.
我曾经想过一种方法来解决这个问题,那就是当我们使纹理比实际更小时使用PO2比率,并且当我们使它变大时使用1:1的比例,但这会创建某些GPU的兼容性问题?
如果有人知道是否会出现问题(我无法检查这一点,因为我的GPU接受NPO2纹理),或者更好的解决方法,我将不胜感激.
我正在使用Slick2D库来向屏幕呈现文本,但为了呈现像Rect这样的gl形状,我需要先禁用GL_TEXTURE_2D.我只是好奇为什么需要它.为什么GL_TEXTURE_2D禁用形状渲染?
我有两个java类(.java文件).我希望能够在另一个类中定义的一个类中创建一个对象的新实例,而不是每次都引用类名.在C#中有#using和包括,但我只能import <pre-compiled code>在java中使用.有没有办法做到这一点:
import TestClass;
Run Code Online (Sandbox Code Playgroud)
然后简单地调用其中的函数而不使用
TestClass.TestFunction()
Run Code Online (Sandbox Code Playgroud)
每次?我只需要让我的所有函数和对象与我的Main类分开.
正如在标题中我希望每帧/更新只能调用glBegin和glEnd一次,因为我已经听到并且正在经历如果你每次更新多次调用它会大幅减速.
这是我的渲染函数的代码:
GL11.glTranslatef(0, 0, -10);
int x = 0;
while (x < World.BLOCKS_WIDTH - 1) {
int y = 0;
while (y < World.BLOCKS_HEIGHT - 1) {
if( x * World.BLOCK_SIZE <= Display.getHeight() || y * World.BLOCK_SIZE <=
Display.getWidth() || x * World.BLOCK_SIZE >= 0 ||
y * World.BLOCK_SIZE >= 0 ) {
blocks.b[data.blocks[x][y]].draw(x + Main.PosX, y + Main.PosY);
}
y++;
}
x++;
}
Run Code Online (Sandbox Code Playgroud)
任何帮助赞赏.
这是我的块类:
GL11.glPushMatrix();
GL11.glTranslatef(Xa * World.BLOCK_SIZE, Ya * World.BLOCK_SIZE, 0);
//GL11.glRotatef(0, 0, 1, 0);
//GL11.glRotatef(0, 1, …Run Code Online (Sandbox Code Playgroud) 我如何设置 opengl 光泽度浮动,以便我可以在着色器程序中使用它gl_FrontMaterial.shininess?
我尝试了这个glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 100f);,但亮点并没有变小,所以我猜光泽没有改变。
编辑: 这是我使用的片段着色器程序:
varying vec4 varyingColor;
varying vec3 varyingNormal;
varying vec4 varyingVertex;
varying vec2 varyingTexCoord;
uniform sampler2D my_color_texture;
varying vec3 varyingEyeVec;
void main() {
vec3 vertexPosition = (gl_ModelViewMatrix * varyingVertex).xyz;
vec3 surfaceNormal = normalize((gl_NormalMatrix * varyingNormal).xyz);
vec3 lightDirection = normalize(gl_LightSource[0].position.xyz - vertexPosition);
float diffuseLightIntensity = max(0, dot(surfaceNormal, lightDirection));
gl_FragColor.rgb = diffuseLightIntensity * varyingColor.rgb;
gl_FragColor += gl_LightModel.ambient;
vec3 reflectionDirection = normalize(reflect(lightDirection, surfaceNormal));
vec3 eyeVecNormal = normalize(varyingEyeVec);
float specular = max(0.0, dot(eyeVecNormal, reflectionDirection)); …Run Code Online (Sandbox Code Playgroud) 我正在尝试用LWJGL 3绘制一条线.它编译并且所有原生设置都正确设置.我在Ubuntu上运行.我真的不明白问题是什么; 窗口初始化,背景是正确的清晰颜色,但线条不会绘制.我几乎完全从我在新网站上找到的唯一示例中复制了代码.我不知道我做错了什么.
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryUtil.NULL;
import java.awt.DisplayMode;
import java.nio.ByteBuffer;
import org.lwjgl.glfw.GLFWErrorCallback;
import org.lwjgl.glfw.GLFWKeyCallback;
import org.lwjgl.glfw.GLFWvidmode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GLContext;
import org.lwjgl.util.Display;
import org.lwjgl.util.glu.GLU;
public class Main {
// We need to strongly reference callback instances.
private static GLFWErrorCallback errorCallback;
private static GLFWKeyCallback keyCallback;
static final int INIT_WIDTH = 300;
static final int INIT_HEIGHT = 300;
// The window handle
private static long window;
public static boolean verbose = true;
public static void init() …Run Code Online (Sandbox Code Playgroud) 我一直在尝试从两个不同的VBO切换到只有一个具有交错属性的VBO.我可以在C++中实现它,但在Scala中它证明是非常困难的.
这是我的实现:
class Mesh(positions: Array[Float], textureCoordinates: Array[Float], indices: Array[Int])
{
// Create VAO, VBO and a buffer for the indices
val vao: Int = glGenVertexArrays
val vbo: Int = glGenBuffers
val ibo: Int = glGenBuffers
setup
private def setup(): Unit =
{
val interleavedBuffer: FloatBuffer = prepareFloatBuffer(positions ++ textureCoordinates)
val indicesBuffer: IntBuffer = prepareIntBuffer(indices)
// One VAO to bind them all!
glBindVertexArray(vao)
glBindBuffer(GL_ARRAY_BUFFER, vbo)
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo)
// Fill buffers with data
glBufferData(GL_ARRAY_BUFFER, interleavedBuffer, GL_STATIC_DRAW)
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL_STATIC_DRAW)
// Set vertex …Run Code Online (Sandbox Code Playgroud) 我正在学习OpenGL,我试图绘制一个红色三角形,但我的三角形保持黑色.
这是我的片段着色器的代码:
#version 330 core
out vec4 color;
void main()
{
color = vec4(1,0,0,1);
}
Run Code Online (Sandbox Code Playgroud)
我的着色器编译没有问题,我使用这个类来使用着色器:
public class ShaderProgram
{
private final int programId;
private int vertexShaderId;
private int fragmentShaderId;
public ShaderProgram() throws Exception
{
programId = glCreateProgram();
if (programId == 0) {
throw new Exception("Could not create Shader");
}
}
public void createVertexShader(String shaderCode) throws Exception {
vertexShaderId = createShader(shaderCode, GL_VERTEX_SHADER);
}
public void createFragmentShader(String shaderCode) throws Exception {
fragmentShaderId = createShader(shaderCode, GL_FRAGMENT_SHADER);
}
protected int createShader(String shaderCode, int …Run Code Online (Sandbox Code Playgroud) 我尝试使用 lwjgl 来创建游戏。我做错了什么,并在下面出错。我该如何解决?它实际上意味着什么?
Exception in thread "main" org.lwjgl.opengl.OpenGLException: Invalid operation (1282)
at org.lwjgl.opengl.Util.checkGLError(Util.java:59)
at org.lwjgl.opengl.GL20.glUniform1f(GL20.java:338)
at com.base.engine.Shader.setUniformf(Shader.java:119)
at com.base.engine.Game.update(Game.java:63)
at com.base.engine.MainComponent.run(MainComponent.java:85)
at com.base.engine.MainComponent.start(MainComponent.java:38)
at com.base.engine.MainComponent.main(MainComponent.java:131)
Java Result: 1
Run Code Online (Sandbox Code Playgroud) 我在使用 LWJGL 3 渲染任何东西时遇到了麻烦。它不会渲染任何东西,同时创建 GLFW 显示并成功清除颜色。
package init;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.nio.IntBuffer;
import org.lwjgl.glfw.GLFWErrorCallback;
import org.lwjgl.glfw.GLFWVidMode;
import org.lwjgl.opengl.GL;
import org.lwjgl.system.MemoryStack;
import exception.ExceptionHandler;
import util.Time;
import static org.lwjgl.glfw.Callbacks.*;
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryStack.*;
public class DisplayInstance {
public String title = "The SuperMatrix";
public GraphicsDevice gd;
public Game game;
public Config conf;
private long display;
private GLFWErrorCallback glfwerrorcallback;
public DisplayInstance(Game …Run Code Online (Sandbox Code Playgroud)