我在 C# Unity 中编程并且遇到了非常烦人的问题 - 我想定义具有以下关系的特殊 Pair 类:
public class Pair<T1>{
public int First;
public T1 Second;
public bool Equals(Pair<T1> b){
return First == b.First;
}
public static bool operator==(Pair<T1> a, Pair<T1> b){
return a.First == b.First;
}
public static bool operator!=(Pair<T1> a, Pair<T1> b){
return a.First != b.First;
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下警告:
警告 CS0660:“Pair”定义运算符 == 或运算符 != 但不覆盖 Object.Equals(object o) (CS0660) (Assembly-CSharp)
但是,当我生成两个Pair具有相同 First 整数类型的对象时,它们的==运算符也会返回True(如我所愿)。当我只声明 Equals 函数时,相同的==运算符返回False值(我知道 Unity 以某种方式比较内存中的收件人),没有警告。有什么方法可以避免警告并仍然获得操作员的True …
我是OpenGL编程的新手.我的目标是设置面向对象的图形编程,我自豪地说我已经取得了一些进展.现在我有不同的问题.
让我们说我们有工作计划什么可以制作一个,两个或许多旋转茶壶.我通过使用我班上的列表来实现这一点.绘图功能的原始代码在这里:
void Draw(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
for(list<teapot>::iterator it=teapots.begin();it!=teapots.end();it++){
glTranslatef(it->pos.x,it->pos.y,it->pos.z);
glRotatef(angle,it->ang.x,it->ang.y,it->ang.z);
glutSolidTeapot(it->size);
glRotatef(angle,-it->ang.x,-it->ang.y,-it->ang.z);
glTranslatef(-it->pos.x,-it->pos.y,-it->pos.z);
}
glPopMatrix();
glutSwapBuffers();
}
Run Code Online (Sandbox Code Playgroud)
一切都很棒,但是当我画出大量的茶壶 - 比如两排128个 - 我的fps数量下降了.我不知道,如果只是硬件限制或我做错了什么?也许glPushMatrix()和glPopMatrix()应该更频繁地发生?还是不那么经常?