コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
未作成ページ
おまかせ表示
ヘルプ
MonoBook
検索
検索
ログイン
個人用ツール
ログイン
ログアウトした編集者のページ
もっと詳しく
投稿記録
トーク
「
Super Graphics Library
」を編集中
ページ
議論
日本語
閲覧
編集
ソースを編集
履歴表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
編集
ソースを編集
履歴表示
全般
リンク元
関連ページの更新状況
特別ページ
ページ情報
2025年3月5日 (水) 02:02時点における
Administrator
(
トーク
|
投稿記録
)
による版
(
→簡単な使い方
)
(
差分
)
← 古い版
|
最新版
(
差分
) |
新しい版 →
(
差分
)
警告: このページの古い版を編集しています。
公開すると、この版以降になされた変更がすべて失われます。
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
'''Super Graphics Library'''(SGL)とは、[[VideoLogic]]が同社の[[PowerVR]]向けに開発した3D APIです。なお末期の公式マニュアルでは「PowerSGL」となっています。 同時期に登場した[[Direct3D]] (3.0および5.0)が非常に低レベルに[[ポリゴン]]を1枚1枚を描画するものなのに対して、SGLはプリミティブ(3Dモデル)、マテリアル(テクスチャ)、カメラなどの要素を組み合わせて「シーン」を組み上げて一気にレンダリングする非常に高レベルなものでした。 SGLではテクスチャなどのリソースの管理も全自動化されていました。[[メモリリーク]]の心配もなしです。 SGLは昨今の高レベルなゲーム開発向けの[[フレームワーク]]や[[ゲームエンジン]]と比較しても遜色のない完成度であり、Direct3Dは3Dの深い知識がないとクソみたいなパフォーマンスしか出せないのに対して、SGLはポンコツプログラマーでも3D入門書レベルの知識でそこそこのパフォーマンスを発揮できるという特徴がありました。 ただSGLには「PowerVRでしか動かない」という絶望的な欠点がありました。 末期の[[PC-9821シリーズ]]向けの[[PC 3DEngine]] くらいしか[[ビデオカード]]が存在しない状況ではどうにもなりませんでした。 == その後 == 後に「[[PowerVR SDK]]」として[[OpenGL ES]]や[[Vulkan]]をバックエンドとしPowerVR以外でも利用できる普通の[[フレームワーク]]になりました。[[Unity]]や[[Unreal Engine 5|UE5]]などの[[ゲームエンジン]]を使うと重すぎて無理すぎる超小型デバイスで人気があるようです。 * https://github.com/powervr-graphics/Native_SDK == 簡単な使い方 == SGLの基本はviewportとcameraを作ってrenderを呼ぶだけです。 <source lang=c> void SetupScene() { device = sgl_create_screen_device(0, 640, 480, sgl_device_16bit, FALSE); viewport = sgl_create_viewport(device, 0, 0, 640, 480,100.0f, 0.0f, 580.0f, 480.0f); } void SetupCameras(){ sgl_create_list(UNAMED_ITEM,TRUE,FALSE); sgl_translate (0.0, 50.0f, -150.0f); camTran = sgl_create_transform(TRUE); camera = sgl_create_camera (3.0f,10.0f,0.0f); sgl_to_parent(); } void UpdateScene() { sgl_modify_transform (camTran, TRUE); sgl_translate (0.0,0.0, frame*5-150); } void DrawScene() { sgl_render(viewport, camera, TRUE); } </source> SGLは[[Entity Component System]]みたいな構造になっており、いわゆるオブジェクトは「リスト」と呼ばれる構造に格納されます。リストを作ってそれらしい要素を追加すると勝手に描画されます。 <source lang=c> void SetupAmbient(){ sgl_create_list(UNAMED_ITEM,TRUE,FALSE); sgl_set_fog(camera, Blue, 0.00075f); sgl_set_background_colour(camera,Blue); sgl_to_parent(); } void SetupGround() { sgl_2d_vec uv1, uv2, uv3; sgl_vector groundPnt = {0.0f,-1.0f, 20.0f }; sgl_vector point2 = {10.0f,-1.0f, 20.0f }; sgl_vector point3 = {0.0f,-1.0f, 10.0f }; sgl_vector groundNrm = {0.0f, 1.0f, 0.0f }; /* UV vectors for texturing */ uv1[0]=0.00f; uv1[1]=0.50f; uv2[0]=0.00f; uv2[1]=0.545f; uv3[0]=0.045f; uv3[1]=0.50f; sgl_create_list(UNAMED_ITEM,TRUE,FALSE); sgl_qual_generate_shadows (FALSE); sgl_set_texture_map (GroundTex, TRUE, TRUE); sgl_set_ambient (White); sgl_set_diffuse (White); sgl_set_opacity (0.7f); sgl_set_texture_effect (TRUE, TRUE, TRUE, FALSE); sgl_add_plane (groundPnt,point2,point3, VISIBLE, NULL,NULL,NULL,uv1,uv2,uv3); sgl_to_parent(); } void SetupSky(void) { sgl_2d_vec uv1, uv2, uv3; sgl_vector groundPnt = {0.0f,500.0f, 500.0f }; sgl_vector point2 = {-120.0f,500.0f, 500.0f }; sgl_vector point3 = {0.0f,500.0f, 620.0f }; uv1[0]=0.01f; uv1[1]=0.00f; uv2[0]=0.2f; uv2[1]=0.055f; uv3[0]=0.055f; uv3[1]=0.00f; sgl_create_list(UNAMED_ITEM,TRUE,FALSE); SkyTran = sgl_create_transform (NAMED_ITEM); sgl_qual_generate_shadows (FALSE); sgl_set_texture_map (SkyTex,FALSE,FALSE); sgl_set_ambient (White); sgl_set_specular (Black, 0); sgl_set_glow (White); sgl_set_diffuse (Blue); sgl_set_texture_effect (TRUE, TRUE, TRUE, TRUE); sgl_add_plane (groundPnt,point2,point3, VISIBLE, NULL,NULL,NULL,uv1,uv2,uv3); sgl_to_parent(); } </source> [[category: 3DCG]]
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)
本文の横幅制限を有効化/無効化