C# 与OPenGL 字符输出问题!
c代码:
#include <windows.h>
// ASCII字符总共只有0到127,一共128种字符
#define MAX_CHAR 128
void drawString(const char* str) {
static int isFirstCall = 1;
static GLuint lists;
if( isFirstCall ) { // 如果是第一次调用,执行初始化
// 为每一个ASCII字符产生一个显示列表
isFirstCall = 0;
// 申请MAX_CHAR个连续的显示列表编号
lists = glGenLists(MAX_CHAR);
// 把每个字符的绘制命令都装到对应的显示列表中
wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, lists);
}
// 调用每个字符对应的显示列表,绘制每个字符
for(; *str!='\0'; ++str)
glCallList(lists + *str);
}
我自己的c#代码:
int isFirstCall = 1;
uint lists;
uint MAX_CHAR = 128;
private void glPrint(OpenGL gl,string text)
{
if( isFirstCall == 1 )// 如果是第一次调用,执行初始化
{
// 为每一个ASCII字符产生一个显示列表
isFirstCall = 0;
// 申请MAX_CHAR个连续的显示列表编号
lists = gl.GenLists((int)MAX_CHAR);
// 把每个字符的绘制命令都装到对应的显示列表中
wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, lists);
}
// 调用每个字符对应的显示列表,绘制每个字符
for (int i = 0; i < text.Length; i++)
{
gl.CallList(lists);
}
}
错在那里了,字符就是出不来?请大虾们给看看!谢谢啦!
[解决办法]
LZ,那你就修改下最后调用函数哪里的形参,glCallList(lists + *str);
和gl.CallList(lists);是有区别的,你按照我说的修改下,因为你里面有些调用的函数
我不知道函数里面会不会有字符处理的问题,从你贴出的代码可以看出应该是在回调list
哪里的时候参数不一致。。