尝试通过 NDK 平台在 android 中执行基于 C++ 的程序时,编译给出错误,即找不到“gl.h”和“gext.h”头文件,因为我已将它们都包含在我的 C++ 代码中。M 使用 android-ndk-r8 并使用 Cygwin 编译它。
here s my code:
**ANDROID.MK**
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NDK1
FILE_LIST := $(wildcard $(LOCAL_PATH)/*.cpp)
LOCAL_SRC_FILES := $(FILE_LIST:$(LOCAL_PATH)/%=%)
include $(BUILD_SHARED_LIBRARY)
---
**APPLICATION.MK**
APP_STL := stlport_static
APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-3
---
**Viewer.cpp**
#include <iostream>
#import "OpenGLES/ES2/gl.h"
#import "OpenGLES/ES2/glext.h"
//#import <GLKit/GLKEffects.h>
#import <GLKit/GLKMath.h>
#include "Viewer.h"
void Viewer::render() {
glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindVertexArrayOES( _vertexArray[0]);
// Render the object with GLKit
glDrawArrays(GL_TRIANGLES, 0, 36);
/////////
glBindVertexArrayOES(_vertexArray[1]);
// Render the object with GLKit
//[self.effect prepareToDraw];
glDrawArrays(GL_TRIANGLES, 0, 36);
}
void Viewer::initialize() {
sceneObj.constructDemoScene();
glEnable( GL_DEPTH_TEST);
///////////////////////////////////
glGenVertexArraysOES(1, &_vertexArray[0]);
glBindVertexArrayOES( _vertexArray[0]);
glGenBuffers(1, &_vertexBuffer[0]);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer[0]);
H3DModel * model = sceneObj.get3DModel(0);
float * vertices = model->vertexBuffObj.getVertices();
for (int c = 0; c < 216; c++)
printf("%f\t", vertices[c]);
glBufferData(GL_ARRAY_BUFFER, 216 * 4, vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray( EVertexAttribPosition);
glVertexAttribPointer(EVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 24,
(void*) offsetof(Vertex, position));
glEnableVertexAttribArray( EVertexAttribNormal);
glVertexAttribPointer(EVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 24,
(void*) offsetof(Vertex, normal));
///////////////////////////////////
glGenVertexArraysOES(2, &_vertexArray[1]);
glBindVertexArrayOES(_vertexArray[1]);
glGenBuffers(2, &_vertexBuffer[1]);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer[1]);
H3DModel * model1 = sceneObj.get3DModel(1);
float * vertices1 = model1->vertexBuffObj.getVertices();
for (int c = 0; c < 216; c++)
printf("%f\t", vertices[c]);
glBufferData(GL_ARRAY_BUFFER, 216 * 4, vertices1, GL_STATIC_DRAW);
glEnableVertexAttribArray(EVertexAttribPosition);
glVertexAttribPointer(EVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 24,
(void*) offsetof(Vertex, position));
glEnableVertexAttribArray(EVertexAttribNormal);
glVertexAttribPointer(EVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 24,
(void*) offsetof(Vertex, normal));
glBindVertexArrayOES(0);
}
void Viewer::unInitialize() {
glDeleteBuffers(1, &_vertexBuffer[0]);
glDeleteBuffers(2, &_vertexBuffer[1]);
glDeleteVertexArraysOES(1, &_vertexArray[0]);
glDeleteVertexArraysOES(2, &_vertexArray[1]);
if (_program) {
glDeleteProgram( _program);
_program = 0;
}
}
GLKMatrix4 Viewer::update() {
GLKMatrix4 baseModelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f,
-4.0f);
baseModelViewMatrix = GLKMatrix4Rotate(baseModelViewMatrix, _rotation,
0.0f, 1.0f, 0.0f);
// Compute the model view matrix for the object rendered with GLKit
//GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -1.5f);
//modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, _rotation, 1.0f, 1.0f, 1.0f);
//modelViewMatrix = GLKMatrix4Multiply(baseModelViewMatrix, modelViewMatrix);
//self.effect.transform.modelviewMatrix = baseModelViewMatrix;
/*// Compute the model view matrix for the object rendered with ES2
modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, 1.5f);
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix, _rotation, 1.0f, 1.0f, 1.0f);
modelViewMatrix = GLKMatrix4Multiply(baseModelViewMatrix, modelViewMatrix);
_normalMatrix = GLKMatrix3InvertAndTranspose(GLKMatrix4GetMatrix3(modelViewMatrix), NULL);
_modelViewProjectionMatrix = GLKMatrix4Multiply(projectionMatrix, modelViewMatrix);*/
_rotation += 0.04f;
return baseModelViewMatrix;
}
在此先感谢..我想知道如何在 android ndk 中使用 OPENGL ES !