質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

967閲覧

opengl(freeglut)で文字列描画

退会済みユーザー

退会済みユーザー

総合スコア0

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/10/13 12:27

前提

c++でopengl(freegult)を使用しています。

実現したいこと

https://w.atwiki.jp/opengl/pages/24.html
このサイトに従って、
openglで文字列を描画するようにしたいのですが、エラーが発生して描画できません。

発生している問題・エラーメッセージ

font->DrawStringW(10,120,L"こんにちは OpenGLの世界!!");
というのを入力すると"L"の部分にエラーが起きます。
.

説明                       | コード 型 の引数は型 のパラメーターと互換性がありません  E0167

該当のソースコード(サイトの内容そのまま)

c++

1#pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup") 2#include <GL/freeglut/freeglut.h> 3#include <stdio.h> 4 5#define WIDTH 320 6#define HEIGHT 240 7 8class GLFONT 9{ 10public: 11 HFONT Hfont; 12 HDC Hdc; 13 GLFONT(wchar_t *fontname, int size); 14 void DrawStringW(int x,int y,wchar_t *format, ...); 15}; 16//コンストラクタ フォント作成 17GLFONT::GLFONT(wchar_t *fontname, int size) 18{ 19 Hfont = CreateFontW( 20 size, //フォント高さ 21 0, //文字幅 22 0, //テキストの角度 23 0, //ベースラインとx軸との角度 24 FW_REGULAR, //フォントの太さ 25 FALSE, //イタリック体 26 FALSE, //アンダーライン 27 FALSE, //打ち消し線 28 SHIFTJIS_CHARSET, //文字セット 29 OUT_DEFAULT_PRECIS, //出力精度 30 CLIP_DEFAULT_PRECIS, //クリッピング精度 31 ANTIALIASED_QUALITY, //出力品質 32 FIXED_PITCH | FF_MODERN, //ピッチとファミリー 33 fontname); //書体名 34 35 Hdc = wglGetCurrentDC(); 36 SelectObject(Hdc, Hfont); 37} 38//ワイド文字列の描画 39void GLFONT::DrawStringW(int x,int y,wchar_t *format, ...) 40{ 41 wchar_t buf[256]; 42 va_list ap; 43 int Length=0; 44 int list=0; 45 46 //ポインタがNULLの場合は終了 47 if ( format == NULL ) 48 return; 49 50 //文字列変換 51 va_start(ap, format); 52 vswprintf_s(buf, format, ap); 53 va_end(ap); 54 55 Length = wcslen(buf); 56 list = glGenLists(Length); 57 for( int i=0; i<Length; i++ ){ 58 wglUseFontBitmapsW(Hdc, buf[i], 1, list + (DWORD)i); 59 } 60 61 glDisable(GL_LIGHTING); 62 glRasterPos2i(x, y); 63 //ディスプレイリストで描画 64 for( int i=0; i<Length; i++ ) 65 { 66 glCallList(list + i); 67 } 68 glEnable(GL_LIGHTING); 69 //ディスプレイリスト破棄 70 glDeleteLists(list, Length); 71 list = 0; 72 Length = 0; 73} 74 75GLFONT *font; 76 77void display(void) 78{ 79 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 80 glColor4f(0.0f, 0.0f, 1.0f, 1.0f); 81 font->DrawStringW(10,120,L"こんにちは OpenGLの世界!!"); 82 glutSwapBuffers(); 83} 84void idle(void) 85{ 86 glutPostRedisplay(); 87} 88void Init(){ 89 glClearColor(1.0, 1.0, 1.0, 1.0); 90 glOrtho(0, WIDTH, HEIGHT, 0, -1, 1); 91 font = new GLFONT(L"MS明朝", 24); 92} 93int main(int argc, char *argv[]) 94{ 95 glutInitWindowPosition(100, 100); 96 glutInitWindowSize(WIDTH, HEIGHT); 97 glutInit(&argc, argv); 98 glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 99 glutCreateWindow("文字列を描画"); 100 glutDisplayFunc(display); 101 glutIdleFunc(idle); 102 Init(); 103 glutMainLoop(); 104 return 0; 105}

補足情報

Visual studio 2022
c++

何か足りなければすみません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

すみません
同じサイトの同じ内容で質問している方がいました。
https://teratail.com/questions/334745
こちらです。
ありがとうございました。

投稿2022/10/13 13:13

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SaitoAtsushi

2022/10/13 15:02

古い言語仕様 (C++03) では文字列リテラルに限って暗黙の変換で const を外すことが許されていました。 (C++03 の 4.2 をご覧ください。) C との互換性を考慮してのことだと思うのですが当然ながらひどい仕様だったので C++11 からその項目が消えることになりました。 また、後にその項目が削除されてからもマイクロソフトのコンパイラはだいぶん後までその挙動を残していました。 参考にしたサイトに書かれているコードはその当時は実際にそれで通っていたのだと思います。 事情は変わっていくので古い資料はあてにならないこともあります。
退会済みユーザー

退会済みユーザー

2022/10/13 21:56

なるほど。 いつもどこのサイトもそのままのコードなのに絶対に一度はエラーが起きていたのでなぜかと思ったのですが、やっと理由が分かりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問