Java 如何旋转形状,它是旋转的单个零件的集合?
我的画又是一个小线条或圆圈的集合,我以不同的角度旋转(大部分是线条)。 现在我想把这整幅画旋转到某个角度 你可以看到我想要达到的目标。 所以我的问题是如何旋转整个图形Java 如何旋转形状,它是旋转的单个零件的集合?,java,opengl,rotation,lwjgl,jogl,Java,Opengl,Rotation,Lwjgl,Jogl,我的画又是一个小线条或圆圈的集合,我以不同的角度旋转(大部分是线条)。 现在我想把这整幅画旋转到某个角度 你可以看到我想要达到的目标。 所以我的问题是如何旋转整个图形 @Override public void display(GLAutoDrawable arg0) { final GL2 gl = arg0.getGL().getGL2(); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
@Override
public void display(GLAutoDrawable arg0) {
final GL2 gl = arg0.getGL().getGL2();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
drwaMan(gl);
gl.glFlush();
}
private void drwaMan(GL2 gl) {
// this line is not working i was hoping by doing something like this entire shape will rotate
//gl.glRotatef(15, 0f, 0f, 1.0f);
float radius = 50;
float cx = 100, cy = 400; // center of circle
int bodyAngel = 180; // draw line at angel
float bodyLineLength = 150;
int lineAngel = 270;
// calculate first point of line
float px = (float) (radius * Math.sin(Math.toRadians(bodyAngel))) + cx;
float py = (float) (radius * Math.cos(Math.toRadians(bodyAngel))) + cy;
// draw head
drawCircle(gl,radius,cx,cy);
// draw line
drawBoadyLine(gl,px,py,bodyLineLength,lineAngel);
// drawhands 50 distance from starting point
drawHands(gl,px,py-50,225,315,100);
// lags at end of line
drawHands(gl,px,py-150,225,315,100);
}
void drawCircle(GL2 gl,float radius,float cx,float cy)
{
gl.glLoadIdentity();
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glBegin(GL.GL_LINE_LOOP);
for (int i = 0; i <= 360; i++) {
float x1, y1;
x1 = (float) (radius * Math.sin(Math.toRadians(i))) + cx;
y1 = (float) (radius * Math.cos(Math.toRadians(i))) + cy;
gl.glVertex2d(x1,y1);
}
gl.glEnd();
}
private void drawHands(GL2 gl, float x, float y, int a1, int a2,int l) {
gl.glLoadIdentity();
gl.glTranslatef(x, y, 0);
gl.glRotatef(a1, 0, 0, 1);
gl.glBegin(GL.GL_LINE_LOOP);
gl.glVertex2f(0, 0);
gl.glVertex2f(l, 0);
gl.glEnd();
gl.glLoadIdentity();
gl.glTranslatef(x, y, 0);
gl.glRotatef(a2, 0, 0, 1);
gl.glBegin(GL.GL_LINE_LOOP);
gl.glVertex2f(0, 0);
gl.glVertex2f(l, 0);
gl.glEnd();
}
private void drawBoadyLine(GL2 gl, float x, float y, float bodyLineLength, int bodyAngel) {
gl.glLoadIdentity();
gl.glTranslatef(x, y, 0);
gl.glRotatef(bodyAngel, 0f, 0f, 1.0f);
gl.glBegin(GL.GL_LINE_LOOP);
gl.glVertex2f(0, 0);
gl.glVertex2f(bodyLineLength, 0);
gl.glEnd();
}
@覆盖
公共空白显示(自动绘图arg0){
最终GL2 gl=arg0.getGL().getGL2();
gl.glClear(gl.gl_颜色_缓冲_位| gl.gl_深度_缓冲_位);
德瓦曼(德国劳埃德);
gl.glFlush();
}
私人无效数据管理员(GL2 gl){
//这条线不起作用,我希望通过这样做,整个形状会旋转
//gl.glRotatef(15,0f,0f,1.0f);
浮动半径=50;
浮点cx=100,cy=400;//圆心
int bodyAngel=180;//在角度处画线
浮体线条长度=150;
int lineAngel=270;
//计算直线的第一点
浮点数px=(浮点数)(半径*数学正弦(数学托拉半径(体角))+cx;
float py=(float)(半径*数学cos(数学toRadians(bodyangle)))+cy;
//牵引头
绘制圆(gl、半径、cx、cy);
//划线
拉丝绳(gl、px、py、车身线长度、线性天使);
//拉手距起点50米
拉手(德国劳埃德船级社,px,py-50225315100);
//线尾滞后
拉手(德国劳埃德船级社,px,py-150225315100);
}
空心绘图圆(GL2 gl、浮动半径、浮动cx、浮动cy)
{
gl.glLoadIdentity();
gl.glColor3f(1.0f、1.0f、1.0f);
gl.glBegin(gl.gl\u LINE\u LOOP);
对于(int i=0;i,drawCircle
的第一个语句是:
gl.glLoadIdentity();
这将重置当前转换矩阵为单位
这使得gl.glRotatef(15,0f,0f,1.0f);
调用无效
您应该删除对glLoadIdentity
的所有调用,并在display
函数中的glClear
之后只执行一次
你还应该看看:
- 要知道巫婆矩阵受到了影响
- 允许您执行临时转换(对象的部分)
drawCircle的第一句话是:
gl.glLoadIdentity();
这将重置当前转换矩阵为单位
这使得gl.glRotatef(15,0f,0f,1.0f);
调用无效
您应该删除对glLoadIdentity
的所有调用,并在display
函数中的glClear
之后只执行一次
你还应该看看:
- 要知道巫婆矩阵受到了影响
- 允许您执行临时转换(对象的部分)
听起来像是2D变换。我发现这是一种变换的备忘。@dbrown93这篇文章只是关于理论知识,没有关于任何api如何实现这一点的真实例子。是的,但它只是应用关于围绕一个点旋转的部分。所以你可以翻译“中心”从人到原点,旋转坐标,然后将人向后平移你应该做一些对我来说听起来像2D变换的事情。我发现这是一种变换的备忘表。@dbrown93这篇文章只是关于理论知识,没有关于如何通过任何api实现这一点的真实示例。是的,但它只是简单的应用程序将零件绕一点旋转,这样就可以平移“中心”将人的坐标移动到原点,旋转坐标,然后将人向后平移。你应该做一些事情,删除整个形状,使其断开连接,并在随机位置绘制形状。也许,但你可以取消glRotate命令的注释,并看到“随机”图像旋转。实际上,没有随机的,你必须进一步思考需要变换的位置(如关节)你的坐标必须是静态的。掌握基础的变化需要时间。通过删除整个形状会断开连接,并且形状可能在随机位置绘制,但是你可以取消glRotate命令的注释,并看到“随机”图像旋转。实际上,没有随机的,你必须进一步考虑你想要在哪里绘制变换(如关节)和坐标必须是静态的。掌握基础变换需要时间。