在我提出问题之前,我想为我笨拙的英语道歉,因为我是外国人。
我想制作一个可以在按钮点击时旋转视图的应用程序。我在按钮点击时修改三角形顶点。
操作完成后,我希望重绘已修改顶点的三角形,但三角形不会改变。
我收到button has changed vertex of triangle
的日志消息,但三角形没有改变。
我需要帮助的人。
这是我的代码: -
方法pos_change / sign_changed / plus和minus是对三角形顶点旋转的修改
private int delx = 0;
private int dely = 0;
public float vertices[] = { delx, dely,
delx, dely,
delx, dely};
public static float pvertices[] = { 0.0f, 0.8f ,0.8f , -0.8f , -0.8f , -0.8f};
private String[] Status = {"up","right","down","left"};
private String now_Status = Status[0];
int Status_Stack =0;
int change =0;
public drawtri(){
array_Plus();
mVertexBuffer = getFloatBufferFromFloatArray(vertices);
}
public void draw(GL10 gl){
gl.glFrontFace(GL10.GL_CW);
gl.glVertexPointer(2, GL10.GL_FLOAT, 0, mVertexBuffer);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, vertices.length/2);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
public void Matrix_Change(char a){
switch(a){
//right
case 'R' :
if(now_Status=="up" ){
array_Minus();
array_Pos_Change();
Status_Stack++;
now_Status= Status[Status_Stack];
array_Plus();
}
else if(now_Status=="right"){
array_Minus();
array_Pos_Change();
array_Sign_Change();
now_Status= Status[++Status_Stack];
array_Plus();
}
else if(now_Status=="down"){
array_Minus();
array_Pos_Change();
now_Status= Status[++Status_Stack];
array_Plus();
}
else if(now_Status=="left"){
array_Minus();
array_Pos_Change();
array_Sign_Change();
Status_Stack=0;
now_Status= Status[Status_Stack];
array_Plus();
}
//left
case 'L':
if(now_Status=="up"){
array_Minus();
array_Pos_Change();
array_Sign_Change();
Status_Stack=3;
now_Status= Status[Status_Stack];
array_Plus();
}
else if(now_Status=="left"){
array_Minus();
array_Pos_Change();
now_Status= Status[--Status_Stack];
array_Plus();
}
else if(now_Status=="down"){
array_Minus();
array_Pos_Change();
array_Sign_Change();
now_Status= Status[--Status_Stack];
array_Plus();
}
else if(now_Status=="right"){
array_Minus();
array_Pos_Change();
now_Status= Status[--Status_Stack];
array_Plus();
}
break;
}
}
public void array_Pos_Change(){
float buffer;
buffer = pvertices[0];
pvertices[0] = pvertices[1];
pvertices[1] = buffer;
buffer = pvertices[5];
pvertices[5] = pvertices[2];
pvertices[2] = buffer;
buffer = pvertices[3];
pvertices[3] = pvertices[4];
pvertices[4] = buffer;
}
public void array_Sign_Change(){
for(int i = 0; i<6 ; i++) pvertices[i] *= -1;
}
public void array_Minus(){
for(int i=0; i<6; i++) vertices[i]-=pvertices[i];
}
public void array_Plus(){
for(int i=0; i<6; i++) vertices[i]+=pvertices[i];
}
这就是按钮代码:
left.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
drawtri.Matrix_Change('L');
}
});
right.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
drawtri.Matrix_Change('R');
}
});
该代码位于onDrawFrame
:
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
GLU.gluLookAt(gl, View_Pos_x, View_Pos_y,height,View_Pos_x, View_Pos_y, 0, 0, +1,0);
draw_Obj(gl);
}
答案 0 :(得分:0)
我绘制使用浮动缓冲区的数组。
我想绘制实时,这意味着我点击按钮并重绘新的顶点
所以..我有很多很多很多男人都会不会想到我的问题
答案是构造函数。构造函数是在类
中只有一个构建的方法是的,顶点已更改但缓冲区未更改!!
public void draw(GL10 gl){
array_Plus();
mVertexBuffer = getFloatBufferFromFloatArray(vertices);
gl.glFrontFace(GL10.GL_CW);
gl.glVertexPointer(2, GL10.GL_FLOAT, 0, mVertexBuffer);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, vertices.length/2);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
//mVertexBuffer.clear();
array_Minus();
}
ㅁ 并删除构造函数(默认)
我对我的问题感到惭愧,但我知道在美国或我的国家有哪些问题与我相同
所以我发布了勇敢的
ps.sorry for my awkward english