我现在一直在使用C++.我只是不确定内存管理是如何工作的,所以在这里:
我首先不确定函数中的内存是如何分配的,例如:
int addTwo(int num)
{
int temp = 2;
num += temp;
return num;
}
Run Code Online (Sandbox Code Playgroud)
那么在这个例子中,函数结束后是否会从内存中删除?如果没有,这是怎么做的.在C#中,一旦变量用完,变量就会被删除.还有其他我应该知道的案例吗?
谢谢
我知道如何处理这个问题,但我不确定它是否理想.事件我的意思是,例如,如果玩家获胜,一堆火花飞行1秒钟.我正在考虑创建我的游戏引擎类,然后创建一个游戏事件基类,它有3个void函数,update,draw,render.例如,可以存在用于收集100个硬币3秒钟的火炮.我想要实现它的方式是在我的游戏引擎中有一个事件向量,我可以在其中推动fireforks动画.一旦在向量中推送了一些东西,游戏就会执行event [i] .render()等...删除它我认为每个事件可以在帧中具有事件长度,并且每个帧增加一个uint,如果uint与长度匹配,则从向量中弹出它.我只是不确定如果这样做是最好的方式.
谢谢
我一直试图用OGL反别名.我找到了一个应该执行此操作的代码块,但我看不到任何抗锯齿.我也在Nvidia控制面板中重置我的设置,但没有运气.
这个代码实际上是反立方体吗?
GLboolean polySmooth = GL_TRUE;
static void init(void)
{
glCullFace (GL_BACK);
glEnable (GL_CULL_FACE);
glBlendFunc (GL_SRC_ALPHA_SATURATE, GL_ONE);
glClearColor (0.0, 0.0, 0.0, 0.0);
}
#define NFACE 6
#define NVERT 8
void drawCube(GLdouble x0, GLdouble x1, GLdouble y0,
GLdouble y1, GLdouble z0, GLdouble z1)
{
static GLfloat v[8][3];
static GLfloat c[8][4] = {
{0.0, 0.0, 0.0, 1.0}, {1.0, 0.0, 0.0, 1.0},
{0.0, 1.0, 0.0, 1.0}, {1.0, 1.0, 0.0, 1.0},
{0.0, 0.0, 1.0, 1.0}, {1.0, 0.0, 1.0, 1.0},
{0.0, 1.0, 1.0, 1.0}, {1.0, …Run Code Online (Sandbox Code Playgroud) 我想在屏幕上绘制许多多边形,但我很快注意到它会很快减速.作为测试,我这样做:
for(int i = 0; i < 50; ++i)
{
glBegin( GL_POLYGON);
glColor3f( 0.0f, 1, 0.0f ); glVertex2f( 500.0 + frameGL.GetCameraX(), 0.0f + frameGL.GetCameraY());
glColor3f( 0.0f, 1.0f, 0.0f ); glVertex2f( 900.0 + frameGL.GetCameraX(), 0.0f + frameGL.GetCameraY());
glColor3f( 0.0f, 0.0f, 0.5 ); glVertex2f(900.0 + frameGL.GetCameraX(), 500.0f + frameGL.GetCameraY() + (150));
glColor3f( 0.0f, 1.0f, 0.0f ); glVertex2f( 500 + frameGL.GetCameraX(), 500.0f + frameGL.GetCameraY());
glColor3f( 1.0f, 1.0f, 0.0f ); glVertex2f( 300 + frameGL.GetCameraX(), 200.0f + frameGL.GetCameraY());
glEnd();
}
Run Code Online (Sandbox Code Playgroud)
这只有50个多边形,而且已经很慢了.我无法将它们直接上传到卡片中,因为我的程序将允许用户重新整形顶点.
我的问题是,我怎样才能加快速度.我没有使用深度.我也知道这不是我的GetCamera()函数,因为如果我创建500,000个多边形分开t很好,它只是在视图中显示它们有困难.如果显卡每秒可以支持500,000,000个屏幕多边形,这应该很容易吗?
谢谢
我想知道用多线程进行GL调用是否安全.基本上我正在使用GLUtesselator并且想知道我是否可以将对象划分为4并为每个对象分配一个线程.
我只是想知道这是否会导致麻烦,因为tesselator使用回调函数.只要该回调不能访问ant全局变量,2个线程可以同时运行相同的回调吗?
还有其他方法可以使用多线程优化OpenGL绘图吗?
我正在创建一个绘图应用程序,当它获得WM_SCROLL或WM_MOUSEMOVE时呈现OpenGL.事情是有很多鼠标移动,我只需要它每秒渲染最多60帧.所以我在我的引擎类中创建了一个名为CanRender的bool.所以在我的render()proc我做:if(!CanRender){return; } CanRender = false;
基本上它可以防止它渲染超过60 FPS.
我在WM_CREATE中创建了计时器.
当我得到WM_TIMER时,我将CanRender设置为true.
我发出嘟嘟声,所以我知道计时器正在运行.一旦我开始滚动或移动鼠标,哔哔声停止,我不再看到渲染.为什么要停止我的计时器?此外,当我最小化计时器再次启动然后重新启动时,它再次停止.
谢谢
消息泵:
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
Run Code Online (Sandbox Code Playgroud)
创建:
case WM_CREATE:
//Set Window Title
SetWindowText(hWnd,engineGL.current.caption.c_str());
SetTimer(hWnd, // handle to main window
120, // timer identifier
17, // 60 fps interval
(TIMERPROC) NULL); // no timer callback
Run Code Online (Sandbox Code Playgroud) 我正在试图弄清楚如何做到这一点.基本上我有点A和B,我知道它的位置.然后我有点C和点D,我只知道C的坐标.我知道CD的长度,知道CD必须与AB平行.我怎么能一般解决D给定的A,B,C和CD的长度.谢谢
我正在使用OpenGL制作3D FPS,这是它如何工作的基础知识.游戏是立方体的3D阵列.我知道玩家当前立方体的位置,以及相机x,y,z,我也知道相机的x,y,z旋转.现在我只是围绕玩家制作一个正方形并渲染它然后添加远处的雾.但问题是,我仍在渲染玩家所拥有的一切.我怎么能有选择地只渲染玩家看到的东西,而不是像我现在所做的那样在X半径范围内渲染所有东西.
谢谢
我有class A和class B.我想class A访问其中一个class B私有函数; 但只有这一点,而不是其他一切.那可能吗?
某种例子:
class A {
//stuff
};
class B {
int r; // A cant use this
MagicFriendKeyword A void func(); // A can use this
public:
...
};
Run Code Online (Sandbox Code Playgroud) 我有一个类有一个子控件指针的std :: vector.出于显而易见的原因,我不希望类的用户直接访问std :: vector.我想要的只是给调用者提供指针的方法.什么是一个很好的OO方式来做到这一点?(此功能将经常调用)
谢谢