妖哥,能給openGL顯示漢字的代碼嗎
uj5u.com熱心網友回復:
直接在Panel上用OpenGL輸出文字uj5u.com熱心網友回復:
OpenGL顯示文字--顯示漢字http://blog.csdn.net/zhouhangjay/article/details/6715332
uj5u.com熱心網友回復:
能幫忙用BC除錯一下嗎
uj5u.com熱心網友回復:
禮拜天沒人?uj5u.com熱心網友回復:
#include <GL/glut.h>#include <windows.h>
#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);
}
void drawCNString(const char* str) {
int len, i;
wchar_t* wstring;
HDC hDC = wglGetCurrentDC();
GLuint list = glGenLists(1);
// 計算字符的個數
// 如果是雙位元組字符的(比如中文字符),兩個位元組才算一個字符
// 否則一個位元組算一個字符
len = 0;
for(i=0; str[i]!='\0'; ++i)
{
if( IsDBCSLeadByte(str[i]) )
++i;
++len;
}
// 將混合字符轉化為寬字符
wstring = (wchar_t*)malloc((len+1) * sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, wstring, len);
wstring[len] = L'\0';
// 逐個輸出字符
for(i=0; i<len; ++i)
{
wglUseFontBitmapsW(hDC, wstring[i], 1, list);
glCallList(list);
}
// 回收所有臨時資源
free(wstring);
glDeleteLists(list, 1);
}
void selectFont(int size, int charset, const char* face) {
HFONT hFont = CreateFontA(size, 0, 0, 0, FW_MEDIUM, 0, 0, 0,
charset, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, face);
HFONT hOldFont = (HFONT)SelectObject(wglGetCurrentDC(), hFont);
DeleteObject(hOldFont);
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT);
selectFont(48, ANSI_CHARSET, "Comic Sans MS");
glColor3f(1.0f, 0.0f, 0.0f);
glRasterPos2f(-0.7f, 0.4f);
drawString("Hello, World!");
selectFont(48, GB2312_CHARSET, "楷體_GB2312");
glColor3f(1.0f, 1.0f, 0.0f);
glRasterPos2f(-0.7f, -0.1f);
drawCNString("當代的中國漢字");
selectFont(48, DEFAULT_CHARSET, "華文仿宋");
glColor3f(0.0f, 1.0f, 0.0f);
glRasterPos2f(-0.7f, -0.6f);
drawCNString("傳統的中國漢字");
glutSwapBuffers();
}
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0); /* select clearing olor */
// glMatrixMode(GL_PROJECTION); /* initialize viewing values */
// glLoadIdentity();
// glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); //注意該視景體的范圍和幾何中心
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize (500, 500); //改為glutInitWindowSize (250, 250); 可以看出變換的僅僅是物體按比例大小的變換
glutInitWindowPosition (100, 100);
glutCreateWindow ("First");
init ();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
那喂兄弟幫用CB除錯一下,自己除錯了一下,老師出現錯誤
uj5u.com熱心網友回復:
對OpenGL不熟悉。你說說報什么錯誤?轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/111500.html
標籤:VCL組件使用和開發
上一篇:C++
