我是OpenGL的新手,我对代码中的所有随机函数都有点不知所措.他们工作,我知道何时使用它们,但我不知道为什么我需要它们或他们实际做什么.
我知道glLoadIdentity()用当前矩阵替换当前矩阵,但究竟是做什么的呢?如果每个程序都需要它,除非另有说明,为什么默认情况下不是单位矩阵?除非我知道他们做了什么,否则我不喜欢在我的代码中使用函数.我应该注意到,我专门为丰富的2D客户端使用OpenGL,所以请原谅我的无知,如果这对于3D非常明显.
关于glMatrixMode(GL_PROJECTION)VS 也有点困惑glMatrixMode(GL_MODELVIEW).
我已经编程了一段时间,但它主要是Java和C#.我实际上从来没有必须自己管理内存.我最近开始用C++编程,我有点困惑的是什么时候我应该把东西存放在堆栈上以及何时将它们存储在堆上.
我的理解是,非常频繁访问的变量应该存储在堆栈中,对象,很少使用的变量和大型数据结构都应该存储在堆上.这是正确的还是我错了?
现在我的OpenGL应用程序变得越来越大,越来越复杂,我注意到它在像上网本这样的低端系统上也变得有点慢.在Java中,我能够通过绘制到BufferedImage来解决这个问题,然后将其绘制到屏幕上,并在一段时间内更新缓存的渲染.我将如何使用C++在OpenGL中执行此操作?
我找到了一些指南,但它们似乎只适用于较新的硬件/特定Nvidia卡.由于缓存的渲染操作只会偶尔更新一次,因此我可以牺牲速度来实现兼容性.
glBegin(GL_QUADS);
setColor(DARK_BLUE);
glVertex2f(0, 0); //TL
glVertex2f(appWidth, 0); //TR
setColor(LIGHT_BLUE);
glVertex2f(appWidth, appHeight); //BR
glVertex2f(0, appHeight); //BR
glEnd();
Run Code Online (Sandbox Code Playgroud)
这是我特别关注的事情.占据整个屏幕的渐变每秒重新绘制多次.如何将其缓存到纹理然后只绘制该纹理以提高性能?
另外,我在Java中使用的一个技巧是将其渲染为1 X高度纹理,然后将其缩放到width x height以提高性能并降低内存使用量.openGL有这么一招吗?
出于某种原因,当我调整OpenGL窗口大小时,一切都崩溃了.图像失真,坐标不起作用,一切都崩溃了.我正在唱Glut来设置它.
//Code to setup glut
glutInitWindowSize(appWidth, appHeight);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutCreateWindow("Test Window");
//In drawing function
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT);
//Resize function
void resize(int w, int h)
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, w, h, 0);
}
Run Code Online (Sandbox Code Playgroud)
OpenGL应用程序严格来说是2D.
这是它最初的样子:http://www.picgarage.net/images/Corre_53880_651.jpeg
这是调整大小后的样子:http://www.picgarage.net/images/wrong_53885_268.jpeg
Android studio的最新更新不允许用户从使用gradle的项目访问项目结构GUI.虽然我已将gradle脚本配置为使用google play服务,但由于某种原因,我仍然无法使用该库.这是我做的:
Run Code Online (Sandbox Code Playgroud)apply plugin: 'android-library' buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } dependencies { compile files('libs/google-play-services.jar') } android { compileSdkVersion 17 buildToolsVersion '17.0.0' sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aild.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } } }
5.)使用以下内容编辑了我的项目的build.gradle:
Run Code Online (Sandbox Code Playgroud)buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android' dependencies { compile files('libs/android-support-v4.jar') …
我有一个对象(A),它有一个由对象(B)组成的列表.列表(B)中的对象是指针,但列表本身应该是指针吗?我正在从Java迁移到C++,但仍然没有完全习惯堆栈/堆.该列表不会在类A之外传递,只传递列表中的元素.为了以防万一,将列表本身分配在堆上是一种好习惯吗?
此外,包含列表(A)的类是否也应该在堆本身上?像列表一样,它不会被传递.