我正在尝试在iPhone上的OpenGL ES中创建一个屏幕外渲染缓冲区.我已经像这样创建了缓冲区:
glGenFramebuffersOES(1, &offscreenFramebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, offscreenFramebuffer);
glGenRenderbuffersOES(1, &offscreenRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, offscreenRenderbuffer);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, offscreenRenderbuffer);
Run Code Online (Sandbox Code Playgroud)
但我对如何渲染存储感到困惑.Apple的文档说使用EAGLContext renderBufferStorage:fromDrawable:方法,但这似乎只适用于一个渲染缓冲区(显示的主渲染缓冲区).如果我使用普通的OpenGL函数glRenderBufferStorageOES,那么我似乎无法让它显示出来.这是代码:
// this is in the initialization section:
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES, backingWidth, backingHeight);
// and this is when I'm trying to draw to it and display it:
glBindFramebufferOES(GL_FRAMEBUFFER_OES, offscreenFramebuffer);
GLfloat vc[] = {
0.0f, 0.0f, 0.0f,
10.0f, 10.0f, 10.0f,
0.0f, 0.0f, 0.0f,
-10.0f, -10.0f, -10.0f,
};
glLoadIdentity();
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vc);
glDrawArrays(GL_LINES, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, offscreenRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
Run Code Online (Sandbox Code Playgroud)
这样做,屏幕上不显示任何内容.但是,如果我将对"offscreen ... Buffer"的引用切换到使用renderBufferStorage方法创建的缓冲区,则它可以正常工作.
有什么建议?
我正在阅读Apple的OpenGL文档.我注意到许多GL名称都有这种格式GL_RENDERBUFFER_OES.OES这些名称部分的含义是什么?
看起来GL已经成为所有游戏平台(甚至手持设备!)的主流.这已经推动了现代GPU芯片组部署到大量消费者.
这真太了不起了.
现在有了现代GPU系统,是否可以进行通用的老式图形编程(也就是说 - 使用VRAM从X rect到Y rect的blit)?(想想Amiga)或者是以顶点和像素着色器为中心的操作?
GL可以访问吗?OpenGL ES?
渲染纹理四边形是可以的,但它需要双缓冲和重新渲染整个场景.看看我是否可以避免这种情况.
有几种模式可供选择:
Modelview
Projection
Texture
Color
Run Code Online (Sandbox Code Playgroud)
他们的意思是什么?什么是最常用的?您对初学者有什么简单的读数吗?
我有2个旋转矩阵(让我们称之为A和B),其中:
A = 1 0 0
0 0 -1
0 1 0
Run Code Online (Sandbox Code Playgroud)
和
B = -1 0 0
0 0 -1
0 -1 0
Run Code Online (Sandbox Code Playgroud)
这基本上只是一个旋转,相机旋转在后面看自己.显然,我不能直接在矩阵中插值,因为它看起来很奇怪.我已经尝试将矩阵转换为欧拉角,产生2组X,Y,Z角,并试图根据X,Y,Z角的每个分量之间的最小距离确定使用哪个角.这肯定会产生我想要的那种旋转,但是我想不出一个合适的方法来确定插入哪个角度,因为有时导致最小误差的角度组会导致围绕错误的轴/轴旋转.我也尝试了四元数,但这基本上给了我相同的结果.谁能指出我正确的方向?
从我读过的东西,看来OpenGL ES 2.0的不是东西,比如OpenGL 2.1,这是我从以前承担.
我很想知道的是OpenGL 3是否与OpenGL ES 2.0相当.换句话说,鉴于我即将为桌面和Android制作游戏引擎,我是否应该特别注意OpenGL 3.x +和OpenGL ES 2.0?
这也可以包括OpenGL 4.x版本.
例如,如果我开始读这本书,我在浪费我的时间,如果我打算端口发动机的Android(当然使用NDK;))?
我正在尝试将属性传递给我的顶点着色器但是由于某种原因它在第三个属性位置上给我一个-1我要求openGl通过glGetAttribLocation()来检索.目前它一直给我一个-1的texCoord属性,如果我切换texAttrib和colAttrib(切换代码中的行)它给我一个-1颜色属性而不是纹理,我不明白为什么?由于-1传递给glVertexAttribPointer,我得到1281 OpenGL错误:GL_INVALID_VALUE.
我的顶点着色器:
#version 150
in vec3 position;
in vec3 color;
in vec2 texcoord;
out vec3 Color;
out vec2 Texcoord;
void main()
{
Color = color;
Texcoord = texcoord;
gl_Position = vec4(position.x, position.y, position.z, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
OpenGL代码:
basicShader.Use();
// Buffers and shaders
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glGenBuffers(1, &vbo);
// Make it active vbo
glBindBuffer(GL_ARRAY_BUFFER, vbo);
// Build basic triangle
float vertices[] = {
// position // color // textures
-0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, // Top-left
0.5f, 0.5f, …Run Code Online (Sandbox Code Playgroud) 我在c ++项目中正确地包含/使用glm数学库(http://glm.g-truc.net/)时遇到了麻烦.由于glm是一个"仅标题"库,我想我可以用这一行包含它:
#include "glm/glm.hpp"
Run Code Online (Sandbox Code Playgroud)
起初这似乎是有效的,因为我可以创建和使用矩阵和向量.但是,当我尝试使用该glm::translate(...)函数时,我收到此错误:
error: ‘translate’ is not a member of ‘glm’
Run Code Online (Sandbox Code Playgroud)
在GLM网站上,他们建议包含带三角括号的库,如下所示:
#include <glm/glm.hpp>
Run Code Online (Sandbox Code Playgroud)
...但是考虑到它在项目目录结构中,认为我可以以其他方式包含它是不正确的?
我已经设置了下面的测试来说明我遇到的问题.该glm文件夹位于testglm.cpp文件旁边.
#include <iostream>
#include "glm/glm.hpp"
using namespace std;
int main(void) {
// works:
glm::mat4 testMatrix1 = glm::mat4(5.0f) * glm::mat4(2.0f);
cout << testMatrix1[0][0] << endl; // output: 10
// doesn't work - (error: ‘translate’ is not a member of ‘glm’):
glm::mat4 testMatrix2 = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));
}
Run Code Online (Sandbox Code Playgroud)
我正在使用来自终端的这个构建命令在osx上构建此测试:
g++ -o bin/glm_test src/testglm.cpp
Run Code Online (Sandbox Code Playgroud)
我不确定我的问题是否与我如何包括库,我如何使用它,或者我是如何构建项目有关.谷歌没有给我任何关于该错误消息的点击,所以我想知道我是否做了一些根本错误的事情.建议将不胜感激.谢谢.
我在cpp中创建了一个简单的opengl文件.它适用于大学计算机.我能够编译该文件,但我无法运行已编译的文件.我得到的错误是:
Inconsistency detected by ld.so: dl-version.c: 224: _dl_check_map_versions: Assertion `needed != ((void *)0)' failed!
Run Code Online (Sandbox Code Playgroud)
文件代码是:
//
// Model.cpp
// cg-projects
//
// Created by HUJI Computer Graphics course staff, 2013.
//
#include "ShaderIO.h"
#include "Model.h"
#include <GL/glew.h>
#ifdef __APPLE__
#include <OpenGL/OpenGL.h>
#else
#include <GL/gl.h>
#endif
#include <glm/glm.hpp>
#include <glm/gtc/type_ptr.hpp>
#include "glm/gtc/matrix_transform.hpp"
#define SHADERS_DIR "shaders/"
Model::Model() :
_vao(0), _vbo(0)
{
}
Model::~Model()
{
if (_vao != 0)
glDeleteVertexArrays(1, &_vao);
if (_vbo != 0)
glDeleteBuffers(1, &_vbo);
}
void Model::init()
{
programManager::sharedInstance()
.createProgram("default", …Run Code Online (Sandbox Code Playgroud) 有没有办法强制参数和参数为单行 - 如果一个或多个字符超过溢出?
例如:
例如,这个:
if(value != "course" || value != "module" || value != "lesson"
)
Run Code Online (Sandbox Code Playgroud)
应该是这样的:
if(value != "course" ||
value != "module" ||
value != "lesson")
Run Code Online (Sandbox Code Playgroud)
或这个:
if(value != "course"
|| value != "module"
|| value != "lesson")
Run Code Online (Sandbox Code Playgroud)
还有这个:
void some_class::some_func(const std:string s, const std::string t
)
Run Code Online (Sandbox Code Playgroud)
应该是这样的:
void some_class::some_func(const std:string s,
const std::string t)
Run Code Online (Sandbox Code Playgroud)
或这个:
void some_class::some_func(const std:string s
, const std::string t)
Run Code Online (Sandbox Code Playgroud)
编辑:
#http://clang.llvm.org/docs/ClangFormatStyleOptions.html
# The style used for all options not specifically …Run Code Online (Sandbox Code Playgroud)