为啥我unity3d 用以下代码没有出现球体?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥我unity3d 用以下代码没有出现球体?相关的知识,希望对你有一定的参考价值。
if(Input.GetButtonDown("Firel"))
var n:Transform = Instantiate(newobject,transform.position,transform.rotation);
球体也拉进去了,能运行。。可是进去点击左键什么都没有出现。。
求大神指点!
另外,这句话应该放在Update 里
为啥我的有线球体在平移和改变相机角度时会变成椭球体?
【中文标题】为啥我的有线球体在平移和改变相机角度时会变成椭球体?【英文标题】:Why does my wired sphere turn into ellipsoid when translating and changing camera angle?为什么我的有线球体在平移和改变相机角度时会变成椭球体? 【发布时间】:2020-05-14 12:03:43 【问题描述】:我需要沿 z 轴来回平移我的有线球体,同时还要改变摄像机角度。每当我的球体被平移时,它就会慢慢变成椭球体。我真的不明白为什么。在这里你可以看到我认为是错误的代码片段。此外,在调整窗口大小时不应该改变形状,只改变它们的大小。
void init()
glClearColor(0.0, 0.0, 0.0, 0.0);
glEnable(GL_DEPTH_TEST);
void display(void)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glLoadIdentity();
gluLookAt(ex, ey, ez, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glTranslatef(0.0,0.0,tra);
glScalef(0.65, 0.65, 0.65);
glColor3f(1.0f, 0.8f, 1.0f);
glutWireSphere(0.65, 10, 15);
glPopMatrix();
glPushMatrix();
glLoadIdentity();
gluLookAt(ex, ey, ez, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glColor3f(0.1f, 0.8f, 1.0f);
glutWireTorus(0.25, 1.0, 15, 15);
glPopMatrix();
glFlush();
glFlush();
void reshape(int w, int h)
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70.0, (GLfloat)w / (GLfloat)h, 1.0, 80.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
【问题讨论】:
【参考方案1】:[...] 同时改变相机角度。每当我的球体被平移时,它就会慢慢变成椭球体。
这是由Perspective distortion 或广角畸变引起的,并且朝向视图边缘增加。可以通过减小视场角来降低效果,但效果永远不会完全取消(平行投影除外)。 另见How to fix perspective projection distortion?。
此外,在调整窗口大小时不应该改变形状,只改变它们的大小。”
在透视投影中,对象的大小始终与视口的大小相关,而不是与屏幕的大小相关。
如果您不希望透视失真,并且如果您希望对象的大小必须相对于屏幕的大小(以像素为单位),那么您必须使用正交投影,相对于大小的视口。
例如:
void reshape(int w, int h)
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//gluPerspective(70.0, (GLfloat)w / (GLfloat)h, 1.0, 80.0);
float sx = w / 100.0f;
float sy = h / 100.0f;
glOrtho(-sx/2.0f, sx/2.0f, -sy/2.0f, sy/2.0f, 1.0f, 80.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
【讨论】:
这解决了我遇到的问题,谢谢@Rabbid76。现在我只需要找到他们在示例 .gif 中使用的相机转换,我的硬件就完成了!以上是关于为啥我unity3d 用以下代码没有出现球体?的主要内容,如果未能解决你的问题,请参考以下文章