OpenGLを用いた文字列の表示に関する質問

このQ&Aのポイント
  • VisualC++6.0でDLLを作成し,VBA上でモデリングを行うツールの作成をしています。文字列の出力はできるが,色の指定ができなくなってしまった。
  • 文字列を描画している部分のソースコードは,glColor3fv( color ); glRasterPos3fv( pos ); for(int i=0;i<strlen(str);i++){ glutBitmapCharacter( GLUT_BITMAP_9_BY_15 , str[i] ); }
  • 他の原因があるかもしれないが,OpenGLを用いた文字列の表示で色の指定ができなくなってしまった。ご教授いただけると助かります。
回答を見る
  • ベストアンサー

OpenGLを用いた文字列の表示

OpenGLを用いた文字列の表示に関して質問です。 現在,VisualC++6.0でDLLを作成し,VBA上でモデリングを行うツールの作成をしています。 http://www.natural-science.or.jp/article/20091123143714.php 上記サイトを参考にして文字列の出力はできたのですが, 文字列に色の指定ができなくなってしまいました。 (ツール作成当初はできていました) 文字列を描画している部分のソースは以下のようにしています。 glColor3fv( color ); glRasterPos3fv( pos ); for(int i=0;i<strlen(str);i++){  glutBitmapCharacter( GLUT_BITMAP_9_BY_15 , str[i] ); } もしかしたら,他のところに原因はあるのかもしれませんが, ご存知の方がいらっしゃいましたら, ご教授いただけませんでしょうか。 以上,よろしくお願いいたします。

noname#240995
noname#240995

質問者が選んだベストアンサー

  • ベストアンサー
  • qwertfk
  • ベストアンサー率67% (55/81)
回答No.1

ライティングはオフになっていますか? glPushAttrib(GL_ENABLE_BIT); glDisable(GL_LIGHTING); glColor3fv( color ); glRasterPos3fv( pos ); for(int i=0;i<strlen(str);i++){  glutBitmapCharacter( GLUT_BITMAP_9_BY_15 , str[i] ); } glPopAttrib(); これで色がつかないでしょうか。

関連するQ&A

  • 文字列関数をうまく表示させたい

    今、文字列関数をしています。参考書通りにしたのですが、ブラウザでは思い通りに表示されません。 <?php $str = "PHPの絵本"; $length = strlen($str); ?> を表示させたいのですが、 <?php $str = "PHPの絵本"; $length = strlen($str); print $length; ?> で良いのではと思って、ブラウザで表示させたのですが、参考書では 「9」が表示されるみたいなのですが、「12」が表示されます。 さらに <?php $str = "PHPの絵本"; $length = mb_strlen($str); ?> も表記させたいのですが、同様に <?php $str = "PHPの絵本"; $length = mb_strlen($str); print $length; ?> と書きこんだのですが、参考書では「6」が出るみたいのなのですが 自分のブラウザでは「12」が表示されます。どうしてなのでしょうか?

    • 締切済み
    • PHP
  • C言語の文字列の取り扱いが分かりません

    こんにちは。 C言語で分からないことがあり、質問させていただきました。 学校で、文字列の取り扱いを習いました。 そこで質問なんですが、以下のソースコードをstrcpy , strcat , strcmp , strlen を使わずに書くことってできないですか? 先生に質問したところ、ポインタとかいうのを使うのだそうですが、それを使わずに書くことってできるんですか?もしよろしければお願いします。 以下のプログラムですが、ユーザーから2つの文字列を受けて、そこから4つの文字列関数を使ってみましょう、というやつです。実行結果も貼っておきますね。 #include <string.h> #include <stdio.h> int main(void) { char str1[80], str2[80]; int i; printf("INPUT 1st word-line. : "); gets(str1); printf("INPUT 2nd word-line. : "); gets(str2); /*文字列(word-line)の長さを確認します。*/ printf("%s is %d moji long.\n", str1, strlen(str1)); printf("%s is %d moji long.\n", str2, strlen(str2)); /*文字列を比較します。*/ i = strcmp(str1, str2); if (!i) printf("two word-lines are same length.\n"); else if (i < 0) printf("%s is smaller than %s.\n", str1, str2); else printf("%s is bigger than %s.\n", str1, str2); /*十分なスペースがあるのなら、str2をstr1の最後に結合させます。*/ if((strlen(str1) + strlen(str2)) < 80 ){ strcat(str1, str2); printf("%s\n", str1); } /*str2をstr1にコピーする*/ strcpy(str1, str2); printf("%s %s\n", str1, str2);

  • Windows7 32bit のOSにて、OpenGLをインストールで

    Windows7 32bit のOSにて、OpenGLをインストールできません。 http://www.natural-science.or.jp/article/20091005103709.php このサイトを参考にインストールし、VisualC++2008 ExpressEdisionを使ってソースコードをコンパイルしたいと考えているのですが、インストール段階で「glut32.dll」というファイルをC:¥Windows¥SysWOW64¥に置こうとしたとき、私のCドライブには「SysWOW64」のフォルダがないので、おそらくインストールできていません。 これについて分かる方がおられましたら、ご指導お願いいたします。

  • 文字列の扱い方

    初歩的な質問ですみません… str文字列からcという文字を見つけたら添字を返すという関数を作ったのですが、 iにこの関数を代入して、if文の制御式にiを使って比較するまでは正常なのですが、 真文にiを使うと何故か偽文(という言い方でいいのでしょうか…この場合("そんな値はありません。"というところです)が実行されてしまいます。 よろしければご教授お願い致します。 #include <stdio.h> int str_char(const char str[],int c) { int len = strlen(str); int i; for (i = 0;i < len;i++) { if (str[i] == c) return i; } return -1; } int main() { char str[64] = "Fucking Brutal Death Metal"; int ch,i; printf("どの文字を調べますか?"); scanf("%c",&ch); i = str_char(str,ch); if (i >= 0) printf("その文字は%d番目にあります。",str_char(str,ch) + 1); //何故かiだと動かない else printf("そんな値はありません。"); return 0; }

  • 文字列に関する関数

    現在C言語の勉強をしております。 そこで、以下の関数の作成について質問させてください。 【関数の仕様】 引数の文字列から、'-'(ハイフン)と'P'以降を排除した文字列を返す。 自分なりに作成してみたのですが、コンパイルで警告が出てしまう状況です・・・。 もっとスマートに書けるんだろうとは思っているんですが、精一杯でした・・・。 どなたか教えていただけませんでしょうか? char *getDelStr(char *str) { int len = strlen(str); int count; char targetStr[32]; for(count = 0; count < len; count++){ if(str[count] != 'P'){ if(str[count] != '-'){ strcat(targetStr,str[count]); } }else{ return targetStr; } } return str; } 以上、よろしくお願いいたします。

  • openGLにおける複雑な図形のモデリング

    稚拙な質問だと思うのですが、ご教授下さい。 OpenGLを勉強中で立方体の表示とかはできるようになったのですが、いざ複雑な図形となると何をどうすべきなのかがさっぱりわかりません。 DirectXの解説ページには、モデリングのツールで作成したファイルを読み込んでプログラムから表示することができるようなことが書いてあるのですが、openGLに関してこのようなページを見つけることができませんでした。 OpenGLで人などをモデリングして表示する際は、こつこつと頂点やら面やらを吐くコードを書きながら調整して行くのが主流なんでしょうか? ・・・そんなわけはないと思うので、既存のツールやそのツールで作ったものをプログラムから利用する手順に関する資料のあるページへのポインタだけでも教えて下さると幸いです。

  • マルチバイト混在の文字列整形

    OS: Linux Ubuntu 言語: C++ 引数でchar*型の文字列配列(マルチバイト含む)を受け取り 指定した幅で枠つきで文字列を出力したいのですがうまくいきません。 作りたい出力 ━━━━━━━ ┃1: あいうえお┃ ┃2: かきく   ┃ ┃3: abc    ┃ ━━━━━━━ - str[] = {"あいうえお", "かきく", "abc"} - あいうえおの後ろは空白なし - 他は空白と文字列を合計してあいうえおと同じ長さに合うように 私の環境では日本語は3byteと認識され  strlen("あいうえお") = 15 となります。 イメージでは for (i = 0; i < strlen(str[])の最大値; i++) { cout << "┃" << i << ":" << setw(15) << left << str[i] << "┃" } のようなコードになると思うのですが 日本語一文字が出力上は2byte分の幅に見えるのに 認識としては3byteになってしまうので空白が1byte多くなり ━━━━━━━ ┃1: あいうえお┃ ┃2: かきく    ┃ ┃3: abc       ┃ ━━━━━━━ のようにずれてしまいます。 (表記上、最初の枠もずれていますが  現状は足りない分を埋めるsetfillが余計に働いてしまうということです。) 何か対策はありますでしょうか?

  • 検索するプログラミング

    C言語の問題で、ユーザが文字列を入力し、半角英数字の入力(最大でも1000文字)を改行があるまで受け付ける。次に、ユーザに検索する文字列(最大でも半角20文字)を入力させ、はじめに入力された文字列内にあるかどうかを表示するプログラムを作成する。配列の外部を参照しないように注意する。そのプログラム内で以下の関数を完成させる。 int str_srch (char str [], char srch_str[]) : 文字列strの中に文字列srch_strが含まれていれば、1を返し、含まれていなければ0を返す関数とする。 このような感じになると思うのですがどなたか分かりませんか? int str_compare(char *s1, char *s2) { //文字列s1の先頭にs2が含まれていれば等しいければ1、 //そうでなければ0を返す //while文を利用して、s2の1文字目からs2がヌル文字になるまで //繰り返し、s1の対応する文字と等しいかどうかチェック //s2の最後の文字まで等しければ、1 //そうでなければ0を返す } int str_length(char *str) { //文字列strの長さを返す } int str_srch(char *str, char *srch_str) { int strlen, srch_strlen; int i,j=0; strlen =str_length(str); //文字列strの長さ srch_strlen =str_length(srch_str); //文字列srch_strの長さ for(i=0;i<strlen;i++){ //strのi文字目からにsrch_strがあるかどうか  j=j+str_compare(&str[i], srch_str) } //jは文字列srch_strが文字列strに何回含まれているか、を表す //jが1より多くなれば1を返し //jが0なら0を返す }

  • 全角文字と半角文字を判別して文字列を追加

    全角文字と半角文字が混合している文字列に文字を追加するプログラムを考えています。 仕様としては全角から半角に変わる際には全角文字の後ろに1234を、 半角から全角に変わるときは半角文字の後ろに4321をつけるというものです。 例1 文字列が「あxxxお」ならば出力結果は「あ1234xxx4321お」 そこで質問なのですが 文字列から全角文字と半角文字をプログラム上で判別して 上記のように出力するにはどうしたらいいんでしょうか? ヒント等ございましたらどうぞお願いします。 とりあえず作ってみた例1の結果を無理やり出力するプログラムのコードを載せておきます。 こちらをうまく改変してくださっても結構ですのでよろしくお願いいたします。 #include <stdio.h> #include <string.h> int main(void){ unsigned char str0[256] = "あxxxお", str1[256] = "1234",str2[256]= "4321"; unsigned int zh,hz, len0 = strlen(str0),len1=strlen(str1),len2=strlen(str2); printf("挿入前:%s\n",&str0); zh=2; //全角から半角に変わる位置 hz=5; //半角から全角に変わる位置 //1234を挿入/// memmove(&str0[zh+len1], &str0[zh], len0 - zh+1); memcpy(&str0[zh], str1, len1); //4321を挿入/// memmove(&str0[hz+len1+len2], &str0[hz+len1], len0); memcpy(&str0[hz+len1], str2, len2); printf("挿入後:%s\n",&str0); return 0; }

  • 文字列

    C言語の勉強をしてて、文字列を反転させる以下のようなプログラムを書いてみました。 #include <stdio.h> #include <string.h> void str_reverse(char s[]) { int i,l=strlen(s); char *r; for(i=0;i<l;i++){ r[i]=s[l-i-1]; } for(i=0;i<l;i++) s[i]=r[i]; return; } int main() { char s[100]; scanf("%s",&s); str_reverse(s); printf("%s",s); return 0; } 実行してみると基本的にうまくいくのですが、文字を10文字入力した時だけ 「問題が発生したため、○○.exeを終了します。…」 というエラーウィンドウが出てきてしまいます。 どなか原因と解決法を教えてください。

専門家に質問してみよう