我正在关注本网站的指南并停止了第2课.首先,我尝试了自己的代码,但是在它不起作用之后,我只是从网站上获取了代码.除了这个之外,它仍然没有画任何东西glClearColor.
我做了什么:
glUseProgram通过主循环移动但没有得到任何结果.我将发布我目前的代码(来自网站的原始代码):
#include <stdio.h>
#include <stdlib.h>
#include <glew.h>
#include <glfw3.h>
#include <glm/glm.hpp>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
int max(int i, int j)
{
if (i > j) return i;
return j;
}
GLuint LoadShaders(const char * vertex_file_path, const char * fragment_file_path){
// Create the shaders
GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER);
GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
// Read the Vertex Shader code from the file
std::string VertexShaderCode;
std::ifstream VertexShaderStream(vertex_file_path, …Run Code Online (Sandbox Code Playgroud) 我们需要在python中制作3D游戏,所以在我的研究中我发现了PyOpenGL.经过一段时间的游戏,我变得难以理解如何移动相机.给我一些示例代码和解释.
我正在使用openGL,但这基本上是一个数学问题.我正在尝试计算投影矩阵,我在视图平面R(x,y,z)上有一个点和该平面N的法线向量(n1,n2,n3).我也知道眼睛在(0,0,0),我猜在技术术语中它是透视参考点.如何从这些数据中获得透视投影?我知道如何以常规方式进行FOV,纵横比以及近距离和远距离飞行.
这听起来很荒谬,但我找不到任何关于如何从顶点数组(从相应的GLuint)到控制台打印顶点的信息?
我需要这样做来帮助我调试应用程序.
我是OpenGL的初学者,并且为通用课程构建了一个小型引擎。现在,我需要实现的一个约束/功能是在运行时更改纹理质量(插值)。
因此,而不是例如:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
Run Code Online (Sandbox Code Playgroud)
它应该更改为mipmaps
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR)
Run Code Online (Sandbox Code Playgroud)
现在,我有一个Texture类,将其抽象化并加载图像并为纹理等创建ID。
我会做的:我会一一绑定游戏中的所有纹理,然后再次设置参数。
或者,如果我想影响所有纹理,是否有更高级或更快速的方法来实现?
我真的很困惑如何gluLookAt和glOrtho或gluPersective一起工作.这是问题所在.
我在-5轴的z轴上绘制了一个2D三角形和一个2D五边形.
//pentagon
glVertex3f(0.5f, 0.5f, -5.0f);
glVertex3f(1.5f, 0.5f, -5.0f);
glVertex3f(0.5f, 1.0f, -5.0f);
glVertex3f(0.5f, 1.0f, -5.0f);
glVertex3f(1.5f, 0.5f, -5.0f);
glVertex3f(1.5f, 1.0f, -5.0f);
glVertex3f(0.5f, 1.0f, -5.0f);
glVertex3f(1.5f, 1.0f, -5.0f);
glVertex3f(1.0f, 1.5f, -5.0f);
//Triangle
glVertex3f(-0.5f, 0.5f, -5.0f);
glVertex3f(-1.0f, 1.5f, -5.0f);
glVertex3f(-1.5f, 0.5f, -5.0f);
Run Code Online (Sandbox Code Playgroud)
然后我定义我的相机位置(0,0,-10)和透视
//Tell OpenGL how to convert from coordinates to pixel values
glViewport(0, 0, w, h);
gluLookAt(0, 0, -10, 0, 0, -200, 0, 1, 0);
glMatrixMode(GL_PROJECTION); //Switch to setting the camera perspective
//Set the camera …Run Code Online (Sandbox Code Playgroud) 我正在为Windows和iOS开发跨平台渲染器.对于一个示例应用程序,我编写了一个在两个平台上都没有问题的着色器(Windows上的着色器版本"#version 120"和iOS上的"#version 100").
接下来我添加了两个光源,在iOS上,奇怪的事情开始发生.我改变了我的代码几次,但它从未向我展示预期的结果(使用只有一个灯光的着色器渲染火炬,这就是为什么它在iOS上看起来很好).
(1)有时一切都是一种颜色:

(2)有时它看起来很糟糕:

在Windows上,它看起来像我期望它看起来:

有谁知道为什么我的着色器在iOS上这样做?
这是(2)的片段着色器:
//Light
uniform mediump float numLights;
//L0
uniform mediump vec4 lightPosition_0;
uniform mediump vec3 lightColor_0;
uniform mediump float lightIntensity_0;
uniform mediump float lightAttenuation_0;
//L1
/*same as for light 0 */
//L2
/*same as for light 0 */
uniform mediump vec3 ambientColor;
uniform mediump vec3 Ka;
uniform mediump vec3 Kd;
uniform mediump vec3 Ks;
uniform sampler2D NormalMap;
uniform sampler2D DiffuseMap;
uniform sampler2D SpecularMap;
varying highp vec4 texCoordVarying;
varying highp vec4 posWorldSpace; // pos …Run Code Online (Sandbox Code Playgroud) 据我所知,点/像素的位置不能是一小部分,至少在光栅图形系统上,硬件使用像素来显示图像.
那么,为什么以及OpenGL如何使用小数值来绘制像素?
例如,怎么可能:glVertex2f(0.15f, 0.51f);?
我正在尝试将自透明纹理渲染到帧缓冲区,但我没有得到我猜到的东西:先前在帧缓冲区上渲染的所有东西都被忽略了,这个纹理与我清理主画布的颜色混合在一起.
这就是我想要的,但不使用framebuffers:
package test;
import com.badlogic.gdx.*;
import com.badlogic.gdx.graphics.*;
import com.badlogic.gdx.graphics.g2d.*;
public class GdxTest extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
@Override
public void create () {
batch = new SpriteBatch();
Pixmap pixmap = new Pixmap(1, 1, Pixmap.Format.RGBA8888);
pixmap.setColor(1, 1, 1, 1);
pixmap.fillRectangle(0, 0, 1, 1);
// Generating a simple 1x1 white texture
img = new Texture(pixmap);
pixmap.dispose();
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.setColor(1, 1, 1, 1);
batch.draw(img, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
batch.setColor(0, …Run Code Online (Sandbox Code Playgroud) 假设我有以下数组(每个数组都有任意长度)并将它们用作备件箱; 将它们中的每一个放入缓冲区,然后让openGL读取elements数组中的索引,并通过从每个数组块中挑选来构造顶点.
我们可以使用
{coordinate v1,normal vn3,color c1,texCoord vt4 } 构造一个顶点
或者我们可以再次使用
{coordinate v1,再次使用普通vn3,使用颜色c3,texCoord vt2 } 构建另一个顶点
请注意,"坐标数组"还不是顶点,它只提供构造顶点的位置.
在使用缓冲区和着色器的现代openGl中,对于初学者来说,这样的事情会非常困难吗?
CoordinatesArray:
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -1.000000
v 0.999999 1.000000 1.000001
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
NormalsArray:
vn 0.000000 0.000000 -1.000000
vn -1.000000 -0.000000 -0.000000
vn -0.000000 -0.000000 1.000000
vn -0.000001 0.000000 1.000000
vn 1.000000 …