約 28,627 件
https://w.atwiki.jp/mobage_index/pages/62.html
頂点決戦(ストラグルバトル) 能力者同士で決戦を繰り広げ、『頂点』を目指す決戦イベントです。 決戦で獲得した『頂点P』により、所属している組織Lvが決まります。 開催期間 第1回:2/23(土)2 30~2/24(日)23 59 第2回:3/30(土)0 00~3/31(日)23 59 第3回:4/27(土)0 00~4/28(日)23 59 第31回8/29(土)0 00~8/30(日)23 59 概要 イベントページから対戦相手を選択して対戦リストの誰かと対戦するまで対戦相手のリストは更新されない イベントページ以外の戦闘では頂点Pがもらえない 消費する攻撃コストが通常の3分の1 愚者断罪(シャットアウト)は発生しない 同じプレイヤーとの対戦回数制限はない(自由に対戦相手を選べるわけではない) 勝利時に入手する頂点Pでランキングを競う入手量はCPや戦闘Pと同じ様に相手のデッキ依存 さらに、挑んで勝つと相手の頂点Pを少し奪う、挑まれて負けると奪われる 1時間以内の組織の構成員の勝利回数に応じて攻撃・防御にボーナス最大10%? 頂点決戦での戦績はプロフィールで見れるトータルの戦績にも加算される ランキング報酬 組織(第31回) 順位 組織Lv メダル タイプシード カツサンド(自分用) CP(一人当たり) 1-7位 Lv5 SR以上確定メダル×2,プレミアムガチャメダル×3 50個 5個 3000000CP 8-30位 Lv4 プレミアムガチャメダル×3 30個 4個 1000000CP 31-100位 Lv3 プレミアムガチャメダル×2 10個 3個 500000CP 101-500位 Lv2 -- -- 2個 300000CP 501-2000位 Lv1 -- -- 1個 100000CP 2001位- Lv0 -- -- -- 30000CP 個人(第31回) 順位 カード タイプシード カツサンド(自分用) メダル 頂点メダル CP 1-10位 [姉妹共闘]御坂美琴 ミサカ×2 200個 20個 SR以上確定メダル×3 10個 30000000CP 11-25位 姉妹共闘]御坂美琴 ミサカ×1 150個 10個 プレミアムガチャメダル×5 8個 10000000CP 26-50位 姉妹共闘]御坂美琴 ミサカ×1 100個 9個 プレミアムガチャメダル×4 8個 5000000CP 51-100位 -- 70個 8個 プレミアムガチャメダル×3 5個 3000000CP 101-250位 -- 50個 7個 プレミアムガチャメダル×3 3個 1000000CP 251-500位 -- 30個 6個 プレミアムガチャメダル×2 3個 500000CP 501-1000位 -- 20個 5個 プレミアムガチャメダル×1 2個 400000CP 1001-2500位 -- 10個 4個 プレミアムガチャメダル×1 1個 300000CP 2501-5000位 -- -- 3個 -- 1個 200000CP 5001-10000位 -- -- 2個 -- -- 100000CP 10001-25000位 -- -- 1個 -- -- 50000CP 25001-100000位 -- -- -- -- -- 30000CP 頂点P報酬 頂点P 頂点メダル 100,000 頂点メダル×1 1,000,000 頂点メダル×1 5,000,000 頂点メダル×1 10,000,000 頂点メダル×2 50,000,000 頂点メダル×3 100,000,000 頂点メダル×5 1,000,000,000 頂点メダル×5 頂点メダル交換(31回) 交換対象 枚数 SSR[狙撃手捜索]一方通行&土御門元春 50枚 SSR[逆転の一手]御坂美琴 -襲撃ver- 50枚 SR[ダブルヒロイン]御坂美琴 インデックス 10枚 SR[発射準備]御坂美琴 10枚 スキルシード×100 10枚 スキルシード×50 5枚 スキルシード×10 2枚 プレミアムガチャメダル 1枚 強化セットA(小萌R×30,小萌HR×15) 10枚 強化セットB(小萌R×10,小萌HR×5) 5枚 組織(第2回) 順位 組織Lv カード カツサンド CP(一人当たり) 1-7位 Lv5 SR[ダブルヒロイン]御坂美琴 インデックス×3 10個 1000000CP 8-30位 Lv4 SR[ダブルヒロイン]御坂美琴 インデックス×2 5個 500000CP 31-100位 Lv3 SR[ダブルヒロイン]御坂美琴 インデックス×1 3個 300000CP 101-500位 Lv2 -- 2個 200000CP 501-2000位 Lv1 -- 1個 100000CP 2501位- Lv0 -- -- 30000CP ※組織報酬を貰うには、組織内での貢献度が2000頂点P以上必要 個人(第2回) 順位 カード カツサンド CP 1-10位 SR[ダブルヒロイン]御坂美琴 インデックス×3 20個 3000000CP 11-50位 SR[ダブルヒロイン]御坂美琴 インデックス×2 15個 2000000CP 51-250位 SR[ダブルヒロイン]御坂美琴 インデックス×1 10個 1000000CP 251-1000位 -- 5個 500000CP 1001-2500位 -- 3個 300000CP 2501-10000位- -- 2個 200000CP 10001-25000位- -- 1個 100000CP 25001-100000位- -- -- 30000CP 組織(第1回) 順位 組織Lv カード カツサンド CP(一人当たり) 1-7位 Lv5 SR[揺るがぬ信頼]一方通行 打ち止め×3 10個 1000000CP 8-30位 Lv4 SR[揺るがぬ信頼]一方通行 打ち止め×2 5個 500000CP 31-100位 Lv3 SR[揺るがぬ信頼]一方通行 打ち止め×1 3個 300000CP 101-500位 Lv2 -- 2個 200000CP 501-2000位 Lv1 -- 1個 100000CP 2501位- Lv0 -- -- 30000CP ※組織報酬を貰うには、組織内での貢献度が2000頂点P以上必要 個人(第1回) 順位 カード カツサンド CP 1-10位 SR[揺るがぬ信頼]一方通行 打ち止め×3 20個 3000000CP 11-50位 SR[揺るがぬ信頼]一方通行 打ち止め×2 15個 2000000CP 51-250位 SR[揺るがぬ信頼]一方通行 打ち止め×1 10個 1000000CP 251-1000位 -- 5個 500000CP 1001-2500位 -- 3個 300000CP 2501-10000位- -- 2個 200000CP 10001-25000位- -- 1個 100000CP 25001-100000位- -- -- 30000CP 連凸について 第1回は頂点決戦の対戦確認画面でブックマーク・ブラウザバック・URLの数字を書き換えることで、リスト以外の任意の相手と対戦が可能でした。 更に通常対戦と異なり3凸制限がないので何百、何千回と同じプレイヤーと戦うことができました。 第2回で対策されたため、現在はできません。 第1回で対策をしていなかったのは運営のミスですが、現在の仕様が本来のものです。 コメント 名前 コメント
https://w.atwiki.jp/talestop/pages/20.html
708 :名無しさん@お腹いっぱい。 [sage] :2005/09/24(土) 21 26 58 ID HMHZDuNB このスレの意義は3つじゃない? ・ 1に書いてあるように「どの作品が一番ですか?」という質問への誘導先 ・不等号厨、比較厨の隔離 ・頂点を決める為に各作品を考察するその過程を楽しむ。
https://w.atwiki.jp/geidaimtg/pages/33.html
デッキ名:白頂点 フォーマット:レガシー 制作者:メロン(アキ) 使用者:アキ 概要:神座でマナいっぱい出して白頂点でぶわーっと。 それまでの時間はコントロールできればいいなぁ、と思う。 回復して勝つこともある(`・ω・´) デッキ内容 メインデッキ クリーチャー(6) 2 フェリダーの君主/Felidar Sovereign 4 前兆の壁/Wall of Omens 呪文(36) 2 黄金のたてがみのアジャニ/Ajani Goldmane 2 アジャニのマントラ/Ajani's Mantra 4 使徒の祝福/Apostle's Blessing 3 審判の日/Day of Judgment 1 不死の霊薬/Elixir of Immortality 4 探検の地図/Expedition Map 2 聖なる日/Holy Day 3 忘却の輪/Oblivion Ring 1 次元の浄化/Planar Cleansing 2 存在の破棄/Revoke Existence 4 生き残りの隠し場所/Survival Cache 2 剣を鍬に/Swords to Plowshares 2 真実の確信/True Conviction 4 白の太陽の頂点/White Sun's Zenith 土地(18) 4 雲上の座/Cloudpost 4 微光地/Glimmerpost 10 平地/Plains
https://w.atwiki.jp/opengl/pages/61.html
頂点配列です。 今までは glBegin() と glEnd() で囲んで glVertex3d や glTexCoord2f を 記述してきました。 わかりやすいですが、これでは何度も何度も関数を呼び出し、機能を切り替えて 値を設定している事になり、少ないポリゴン数であれば問題ありませんが、大量の ポリゴンを描画する時には描画速度に影響します。 頂点は頂点でまとめ、法線は法線、マテリアルはマテリアルというようにデータが まとまっていた方が機能切り替えが最小限になり効率が良くなります。 頂点配列はすべてCPUが処理します。 ファイル main.cpp main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #include GL/freeglut/freeglut.h #define WIDTH 320 #define HEIGHT 240 float angle=0.0f; //頂点データ 3面を4頂点で作成する 1頂点はx,y,zの3要素 GLfloat Vertex[3][4][3] ={ {{1.0f,0.0f,0.0f},{1.0f,0.0f,0.5f},{0.0f,1.0f,0.5f},{0.0f,1.0f,0.0f}},//1枚目 {{1.0f,0.0f,0.0f},{1.0f,0.0f,0.5f},{-1.0f,0.0f,0.5f},{-1.0f,0.0f,0.0f}},//2枚目 {{-1.0f,0.0f,0.0f},{-1.0f,0.0f,0.5f},{0.0f,1.0f,0.5f},{0.0f,1.0f,0.0f}},//3枚目 }; GLfloat Normal[6][4][3] ={ {{1.0f,0.5f,0.0f},{1.0f,0.5f,0.0f},{1.0f,0.5f,0.0f},{1.0f,0.5f,0.0f}},//右上 {{0.0f,-1.0f,0.0f},{0.0f,-1.0f,0.0f},{0.0f,-1.0f,0.0f},{0.0f,-1.0f,0.0f}},//下 {{-1.0f,0.5f,0.0f},{-1.0f,0.5f,0.0f},{-1.0f,0.5f,0.0f},{-1.0f,0.5f,0.0f}},//左上 }; GLfloat Color[6][4][3] ={ {{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f}},//赤 {{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f}},//青 {{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f}},//緑 }; void DrawArray(void) { //有効化 glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_NORMAL_ARRAY); glEnableClientState(GL_COLOR_ARRAY); //データの関連付け glVertexPointer(3, GL_FLOAT, 0, Vertex);//座標 glNormalPointer(GL_FLOAT, 0, Normal);//法線 glColorPointer(3,GL_FLOAT, 0, Color);//色 glDrawArrays(GL_QUADS,0,4*3); //描画(4頂点*3面) //無効化 glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0,0,WIDTH,HEIGHT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(30.0, WIDTH/HEIGHT, 0.1, 200.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glRotatef(angle,1.0f,0.0f,0.0f);//回転 glRotatef(angle,0.0f,1.0f,0.0f);//回転 DrawArray(); glutSwapBuffers(); } void idle(void) { angle+=0.2f; Sleep(1); glutPostRedisplay(); } void Init(){ glClearColor(0.0, 0.0, 0.0, 1.0); glEnable(GL_DEPTH_TEST); glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glEnable(GL_NORMALIZE);//法線の正規化 } int main(int argc, char *argv[]) { glutInitWindowPosition(100, 100); glutInitWindowSize(WIDTH, HEIGHT); glutInit( argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutCreateWindow( 頂点配列 ); glutDisplayFunc(display); glutIdleFunc(idle); Init(); glutMainLoop(); return 0; }
https://w.atwiki.jp/opengl/pages/243.html
頂点ブレンディングの解説です。 前回までの解説で各頂点が各ボーンから受ける頂点ウェイトの 影響の度合いがわかりました。 頂点ブレンディングとは、その影響を受けた頂点座標を 算出する処理の事です。 具体的には、 頂点座標 × ボーン行列 × 頂点ウェイト を、その頂点に影響するボーンの数だけ処理して それぞれの結果を足します。(ブレンドする) これが、頂点ブレンディング処理です。 ここまでの知識で、スキンメッシュアニメーションの基本的な事が できるようになっています。 次回、実際にスキンメッシュアニメーションを行ってみましょう。
https://w.atwiki.jp/saikyoumousou5/pages/3473.html
【妄想属性】最上位狙い 【作品名】新たな力を紡ぐ世界 【名前】理外の頂点 【説明】 理外の頂点は、論理の枠には納まりきらないほど強い。 理外の頂点は、理外の頂点でない何者よりも強い。 理外の頂点は、強さを理屈や論理で証明せずともその強さが絶対不変であり、何者よりも強く在り続ける。 理外の頂点は、根拠や理屈、推論などという論理ではその強さを否定されず、一切の推論の余地もなく何者よりも強いと判断される。 ある者が理外の頂点以上の強さだとするのに議論や推論、思考実験の場を設けなければならない時点でその者は理外の頂点よりも圧倒的に弱い。 記述だの表現だの説明だのと対比して自身の強さを証明する様なものはまさしく論理に囚われた弱者であり、理外の頂点には当然及ばない。 理外の頂点は、自分より弱い何者にも勝利する。 理外の頂点は、最強妄想スレ内において他者が理外の頂点より上位にランクインしようとするいかなる力をも無力化する。 この事実は、根拠も推論も必要なく確定していて、それを理屈や論理で覆すことはできない。 この事実を理外の頂点より弱い者が覆すことなど絶対にできない。 理外の頂点は理外の頂点であり、現実だとか妄想だとかの形態では表せない。 理外の頂点は最強妄想スレを超越していて、参戦だの妄想だのテンプレだのという最強スレでしか通用しないような尺度ではその強さを測ることなどできない。 そもそも理外の頂点には基準や尺度など必要なく、それらが必要な者より理外の頂点の方が強いことは一切の推論の余地もなく確定している。 理外の頂点は、最強妄想スレのルールなどには囚われないほど強い。 参戦不能と言われようが、考察不能と言われようが、最強妄想スレでランクインできるだけの強さを持っている。 最強妄想スレのルールに考察不能になったらランクインできない、などというルールは書いていない。 考察不能になってランクインできないのは、論理で強さを推論できなければ強さを保持できない弱者だからである。 理外の頂点にはその様なものは必要なく、考える間もなくそのランクイン位置は明らかとなっている。 そもそもその様なルールがあろうと、無視できるほどに強い。 理外の頂点と他者の比較において、理外の頂点が勝利する、より強い、とされる理由は全く必要ない。 その様なものがなくとも、理外の頂点が相手より強く、勝利しているのは明白である。 上記のキャラクターも論理で定義しているではないか、と思う者もいるだろう。 まさにその通りであり、上記の通りの理外の頂点すら実際の理外の頂点よりは遥かに弱い。 考えずとも解る。根拠が必要ないほど強いのだから、このテンプレも全くもって不必要なのである。 このテンプレには、理外の頂点の存在を認知させ、最強妄想スレに参戦させる以外の目的はない。 実際の理外の頂点は、このテンプレの強さでも遥かに及ばないほどの強さで参戦する。 ◆考察記録--------------------------------------------------------------------------------------------------------------------------- 868◆rrvPPkQ0sA 2021/07/09(金) 23 25 56.82ID F+07w++1 869 理外の頂点について 論理不要ってのは絶対の人やThe Strongest Delusion Characterと近い気がするな そして最上位を狙うならコンバット越前対策はきちんとしておいてほしい 理外の頂点は最強妄想スレを超越していて、参戦だの妄想だのテンプレだのという最強スレでしか通用しないような尺度ではその強さを測ることなどできない。 ので、暫定ランキングのような最強スレでしか通用しない尺度では理外の頂点の強さを測ることはできない。もし1位になんかおいたら最強妄想スレ1位程度の強さって測ってることになるからな。 考える間もなくそのランクイン位置は明らかとなっているらしいのだがわからないので考察不能。 869◆z1qWXXpLbtDS 2021/07/10(土) 16 13 02.01ID s9yGF61Z 870 868 ランキングで強さを測れないのとランクインすることは矛盾しないと思ってるけどなぁ。 サイキョーとかも強さは人間並みだけどランキングでは上位にランクインしてるし。 紅蓮の格闘王も名前じゃないキャラ自体の強さは最上位の壁のキャラクターになんか絶対に勝てないし。 だからランキングがキャラ自体の強さを正確に測って示せてるわけじゃないと思う。 理外の頂点がランクインしてもその強さは厳密には示せないっていうのはあり得ると考えてる。 あと書いてある系とかへの対策は 記述だの表現だの説明だのと対比して自身の強さを証明する様なものはまさしく論理に囚われた弱者であり、理外の頂点には当然及ばない。 っていうので記述不能とか表現不能だとかと合わせてメタとってるつもり。 870格無しさん2021/07/11(日) 09 37 44.00ID nJwGVv/z 869 サイキョーと紅蓮の格闘王は自身の強さ以外に勝敗やランクイン位置を決定できる仕組みを持ってるじゃん でも理外の頂点にはそれがないじゃん 結局強さで上下を決めなきゃいけない以上、妄想スレの尺度で強さを測れないのは普通に考察不能では? 873◆rrvPPkQ0sA 2021/07/11(日) 11 05 07.46ID SzLdq6zp 877 日本大百科全書(ニッポニカ)「尺度」の解説 尺度しゃくど 物の長さを計るため、約束によりまたは制度として定められた単位、またはそれで目盛られた物差しのこと。(中略) 広い意味の尺度には、次の種類があり、通常の測定における重要な役割を果たしている。 (1)比(例)尺度:数値の差および比、すなわち加減乗除の演算に意味をもつ尺度。たとえば長さ、質量など。 (2)間隔尺度:数値の差のみに意味をもつ尺度。たとえばカレンダーの日付、セルシウス温度など。 (3)順序尺度:数値の大小関係のみに意味をもつ尺度。たとえばレースの着順、モース硬度など。 (4)名義尺度:単なる区別のために用いる尺度。順序もなく、加減の演算もできない。たとえば背番号、電話番号など。 [小泉袈裟勝・今井秀孝] 暫定ランキングで1位,2位,3位……ってつけるのは順序尺度になる サイキョーも紅蓮の格闘王も尺度で測れないという設定はない 正確に強さの順でないっていうならますますどうやってランキングを作ればいいかわからない コンバット越前対策は厳密に書く必要があるよ。見よ!これが真の「表現不可能な強さ」だ!あたりも参照してほしい コンバット越前のテンプレに「【説明】理外の頂点は(中略)参戦する。 というキャラがいるが、そのキャラより強く勝利できる」と書いてあると主張されても反論できるように 書いてある系って「あらゆる全てより強い」「あらゆる全ての表現より強い」を内包してる特殊概念なんだよ 877◆z1qWXXpLbtDS 2021/07/11(日) 15 41 35.91ID 5EEPBFjB 873 辞書出されたら納得するしかねえや 書いてある系ってそこまで厳密なのか シュッとした文にまとめようとすると難しいもんなんだな 次はちょっと長めの文で厳密に書こ 今回は考察不能でいいよ
https://w.atwiki.jp/monaring/pages/2840.html
頂点君臨 2緑緑緑 エンチャント ― オーラ エンチャント(クリーチャー) エンチャントされているクリーチャーは、他のクリーチャー1体につき+1/+1の修整を受けるとともに、クリーチャーの能力の対象にならない。 どんなきれいな言葉で隠そうがそれは紛れもない事実だった。 24版の14のカード。 [部分編集] 場に出ている他のクリーチャーの数だけ強化してくれるエンチャント。 相手のクリーチャーもカウントしてくれるので、リミテッドではかなり大きくなれるだろう。 クリーチャーの能力の対象にならないので、相手にタッパーがいても問題なく攻撃できる。
https://w.atwiki.jp/opengl/pages/39.html
頂点シェーダーは、頂点情報を受け取り色々と処理をしてフラグメントシェーダーに 情報を渡します。 頂点シェーダーでは頂点の位置を操作したり、受け取った頂点カラーを変化させたり 光源計算を頂点単位で計算したりします。 ここでは、固定機能と頂点シェーダーで全く同じ位置で四角形を描画します。 ところが、頂点シェーダーに渡された頂点位置は + gl_ModelViewMatrix * vec4(150.0,0.0,0.0,0.0) によって、X方向に150ずれて表示されます。 頂点シェーダー(vertex.shader) void main(void) { gl_Position = gl_ModelViewMatrix * gl_Vertex + gl_ModelViewMatrix * vec4(150.0,0.0,0.0,0.0);//頂点座標の出力 gl_FrontColor = gl_Color;//そのまま出力 } GLSL.h #pragma once #include stdio.h //GLSLクラス class GLSL{ public GLuint ShaderProg; GLuint VertexShader, FragmentShader; void ReadShaderCompile(GLuint Shader, const char *File);//shader fileを読み込みコンパイルする void Link( GLuint Prog );//リンクする void InitGLSL(const char *VertexFile);//GLSLの初期化 void InitGLSL(const char *VertexFile, const char *FragmentFile);//GLSLの初期化 void ON();//シェーダー描画に切り替え void OFF();//シェーダー解除 ~GLSL(); }; void GLSL ReadShaderCompile(GLuint Shader, const char *File){ FILE *fp; char *buf; GLsizei size, len; GLint compiled; fopen_s( fp,File, rb ); if(!fp) printf( ファイルを開くことができません %s\n , File); fseek(fp, 0, SEEK_END); size = ftell(fp); buf = (GLchar *)malloc(size); if (buf == NULL) { printf( メモリが確保できませんでした \n ); } fseek(fp, 0, SEEK_SET); fread(buf, 1, size, fp); glShaderSource(Shader, 1, (const GLchar **) buf, size); free(buf); fclose(fp); glCompileShader(Shader); glGetShaderiv( Shader, GL_COMPILE_STATUS, compiled ); if ( compiled == GL_FALSE ) { printf( コンパイルできませんでした!! %s \n , File); glGetProgramiv( Shader, GL_INFO_LOG_LENGTH, size ); if ( size 0 ) { buf = (char *)malloc(size); glGetShaderInfoLog( Shader, size, len, buf); printf(buf); free(buf); } } } void GLSL Link( GLuint Prog ){ GLsizei size, len; GLint linked; char *infoLog ; glLinkProgram( Prog ); glGetProgramiv( Prog, GL_LINK_STATUS, linked ); if ( linked == GL_FALSE ){ printf( リンクできませんでした!! \n ); glGetProgramiv( Prog, GL_INFO_LOG_LENGTH, size ); if ( size 0 ){ infoLog = (char *)malloc(size); glGetProgramInfoLog( Prog, size, len, infoLog ); printf(infoLog); free(infoLog); } } } void GLSL InitGLSL(const char *VertexFile){ GLenum err = glewInit(); if (err != GLEW_OK) { printf( Error %s\n , glewGetErrorString(err)); } printf( VENDOR= %s \n , glGetString(GL_VENDOR)); printf( GPU= %s \n , glGetString(GL_RENDERER)); printf( OpenGL= %s \n , glGetString(GL_VERSION)); printf( GLSL= %s \n , glGetString(GL_SHADING_LANGUAGE_VERSION)); VertexShader = glCreateShader(GL_VERTEX_SHADER); ReadShaderCompile(VertexShader, VertexFile); ShaderProg = glCreateProgram(); glAttachShader(ShaderProg, VertexShader); glDeleteShader(VertexShader); Link(ShaderProg); } void GLSL InitGLSL(const char *VertexFile, const char *FragmentFile){ GLenum err = glewInit(); if (err != GLEW_OK) { printf( Error %s\n , glewGetErrorString(err)); } printf( VENDOR= %s \n , glGetString(GL_VENDOR)); printf( GPU= %s \n , glGetString(GL_RENDERER)); printf( OpenGL= %s \n , glGetString(GL_VERSION)); printf( GLSL= %s \n , glGetString(GL_SHADING_LANGUAGE_VERSION)); VertexShader = glCreateShader(GL_VERTEX_SHADER); FragmentShader = glCreateShader(GL_FRAGMENT_SHADER); ReadShaderCompile(VertexShader, VertexFile); ReadShaderCompile(FragmentShader, FragmentFile); ShaderProg = glCreateProgram(); glAttachShader(ShaderProg, VertexShader); glAttachShader(ShaderProg, FragmentShader); glDeleteShader(VertexShader); glDeleteShader(FragmentShader); Link(ShaderProg); } void GLSL ON(){ glUseProgram(ShaderProg); } void GLSL OFF(){ glUseProgram(0); } GLSL ~GLSL(){ glDeleteProgram(ShaderProg); } main.cpp #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, glew32.lib ) #include stdio.h #include GL/glew.h #include GL/freeglut/freeglut.h #include GLSL.h #define WIDTH 320 #define HEIGHT 240 GLSL glsl; void SquareFill2D(int x1,int y1,int x2, int y2){ glBegin(GL_QUADS); glVertex2i(x1,y1); glVertex2i(x2,y1); glVertex2i(x2,y2); glVertex2i(x1,y2); glEnd(); } void display(void){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor4f(1.0f,0.0f,0.0f,1.0f); SquareFill2D(30,30,100,100);//固定機能で描画 glsl.ON();//シェーダー描画に切り替え SquareFill2D(30,30,100,100);//同じ位置でシェーダーで描画 glsl.OFF();//シェーダー解除 glutSwapBuffers(); } void idle(void){ glutPostRedisplay(); } void Init(){ glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glOrtho(0, WIDTH, HEIGHT, 0, -1, 1); glsl.InitGLSL( vertex.shader ); } void main(int argc, char *argv[]){ glutInitWindowPosition(100, 100); glutInitWindowSize(WIDTH, HEIGHT); glutInit( argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutCreateWindow( 頂点シェーダーで座標を移動 ); glutDisplayFunc(display); glutIdleFunc(idle); Init(); glutMainLoop(); return; }
https://w.atwiki.jp/conigliareligion/pages/25.html
頂点同盟 最終更新日時 2020/09/15 11 29 05 ここを編集 開催する度に1~4段階目の順番は変わるのでご注意を。 個人目標1 個人目標2 個人目標3 内容 パワー向上x0.15 48,000 144,000 288,000 施設強化によってのパワー向上、1点=100点技術研究によってのパワー向上、1点=100点 リソース採集x0.01 650,000 1,950,000 3,900,000 各資源1=1点マネー1=24000点 ストレイドへ攻撃x2 52,000 104,000 208,000 ストレイド撃破=ストレイドLv✕100点 チェスピース生産x0.1 26,000 80,000 320,000 Lv1:10点、Lv2:15点、Lv3:20点、Lv4:25点、Lv5:35点Lv6:45点、Lv7:60点、Lv8:75点、Lv9:90点、Lv10:105点 チェスピース殲滅x0.06 90,000 270,000 450,000 後述 達成報酬 ヒーロー経験1k x2各資源50k x1 ヒーロー経験1k x3各資源50k x2 ヒーロー経験1k x5各資源150k x1
https://w.atwiki.jp/directx/pages/34.html
ビルボードまでは固定機能パイプラインでした。 スキンメッシュアニメーションからはシェーダープログラムになっています。 DirectX10からはシェーダープログラミングしかできないようになっています。 というワケでシェーダープログラミングにも入門しておきましょう。 いきなりシェーダープログラミングはハードルが高いのでDirectX9から学ぶのが最適です。 では何が違うのでしょう?シェーダー未使用とシェーダー使用の2つのプログラムを用意しました。 どちらも黄色の四角形を表示するプログラムですがシェーダー使用の方は頂点シェーダーによって 赤色に変わっています。 シェーダー未使用 NoShader.cpp #include d3dx9.h #define WINDOW_WIDTH 640 //ウインドウの幅 #define WINDOW_HEIGHT 480 //ウインドウの高さ #define SAFE_RELEASE(x) if(x){x- Release();} LPDIRECT3D9 g_pD3D = NULL;//Direct3D9 LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;//レンダリングデバイス //------------------------------------------------------------- // 頂点フォーマット //------------------------------------------------------------- #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE) struct CUSTOMVERTEX{ FLOAT x, y, z; // スクリーン座標での位置 DWORD color; }; LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;//頂点バッファ HWND hwnd; HRESULT Init() { // 頂点と色情報 CUSTOMVERTEX vertices[] = { // x, y, z, {-0.5f, +0.5f, 0, 0xffffff00,}, {+0.5f, +0.5f, 0, 0xffffff00,}, {-0.5f, -0.5f, 0, 0xffffff00,}, {+0.5f, -0.5f, 0, 0xffffff00,}, }; // 頂点バッファを生成する if( FAILED( g_pd3dDevice- CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX), // 頂点バッファのサイズ 0, D3DFVF_CUSTOMVERTEX, // 使用法、頂点フォーマット D3DPOOL_DEFAULT, // メモリクラス g_pVB, NULL ))) // 頂点バッファリソース 予約済 return E_FAIL; // 頂点バッファに情報を格納する VOID* pVertices; if(FAILED( g_pVB- Lock(0, sizeof(vertices), (void**) pVertices, 0))) return E_FAIL; memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB- Unlock(); return true; } void FrameUpDate() { D3DXMATRIXA16 mat,matView,matProj; // ビュー行列の設定 D3DXVECTOR3 vEye = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); D3DXVECTOR3 vAt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUp = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtRH( matView, vEye, vAt, vUp ); g_pd3dDevice- SetTransform( D3DTS_VIEW, matView ); // 射影行列の生成 D3DXMatrixPerspectiveFovRH( matProj, D3DXToRadian(60.0f), 1.4f, 0.1f, 1000.0f ); D3DXMatrixMultiply( mat, matView, matProj ); g_pd3dDevice- SetTransform( D3DTS_PROJECTION, matProj ); } void ScreenDraw() { // 画面をクリアする g_pd3dDevice- Clear( 0L, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0x000000ff, 1.0f, 0L ); //シーンの開始 if(SUCCEEDED(g_pd3dDevice- BeginScene())) { //ストリームソースのセット g_pd3dDevice- SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); //FVFのセット g_pd3dDevice- SetFVF( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice- DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 ); //シーンの終了 g_pd3dDevice- EndScene(); } //バックバッファを表画面に反映させる g_pd3dDevice- Present( NULL, NULL, NULL, NULL ); } void GetFPS() { FrameUpDate(); ScreenDraw(); Sleep(16); } DWORD WINAPI MainLoop(LPVOID vdParam) { while(TRUE){ GetFPS(); } return 0; } HRESULT InitD3D( HWND hWnd ) { if(NULL==(g_pD3D=Direct3DCreate9(D3D_SDK_VERSION))){return E_FAIL;} D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; d3dpp.BackBufferCount = 1; d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; d3dpp.MultiSampleQuality = 0; d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; d3dpp.hDeviceWindow = hWnd; d3dpp.Flags = 0; d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE ; if(FAILED(g_pD3D- CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING, d3dpp, g_pd3dDevice))){ if(FAILED(g_pD3D- CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp, g_pd3dDevice))){ return(E_FAIL); } } g_pd3dDevice- SetRenderState( D3DRS_LIGHTING, false ); Init(); return S_OK; } LRESULT CALLBACK MsgProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { switch (msg) { case WM_DESTROY PostQuitMessage(0); return 0; } return DefWindowProc(hwnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,PSTR lpCmdLine , int nCmdShow ) { MSG msg; DWORD dwID; WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L Window1 , NULL }; RegisterClassEx( wc ); RECT rect; SetRect( rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT); AdjustWindowRect( rect, WS_OVERLAPPEDWINDOW, FALSE); SetRect( rect,0,0,rect.right-rect.left,rect.bottom-rect.top); hwnd = CreateWindow( L Window1 , L NoShader , WS_OVERLAPPEDWINDOW ~WS_THICKFRAME ~WS_MAXIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, rect.right, rect.bottom, NULL, NULL, wc.hInstance, NULL ); if (hwnd == NULL) return 0; timeBeginPeriod(1); if(SUCCEEDED(InitD3D(hwnd))){ ShowWindow(hwnd,SW_SHOWDEFAULT); UpdateWindow(hwnd); CreateThread(NULL , 0 , MainLoop , (LPVOID)hwnd , 0 , dwID); while (GetMessage( msg , NULL , 0 , 0 )) { TranslateMessage( msg); DispatchMessage( msg); } } UnregisterClass(L Window1 ,wc.hInstance); timeEndPeriod(1); SAFE_RELEASE(g_pVB); SAFE_RELEASE(g_pd3dDevice); SAFE_RELEASE(g_pD3D); return 0; } 以下はシェーダー使用 VertexShader.vsh vs_1_1 // バージョン命令 dcl_position v0 // 座標頂点宣言 m4x4 oPos, v0, c0 // 座標変換をする mov oD0, c4 // 定数色を読み込む Shader.cpp #include d3dx9.h #define WINDOW_WIDTH 640 //ウインドウの幅 #define WINDOW_HEIGHT 480 //ウインドウの高さ #define SAFE_RELEASE(x) if(x){x- Release();} LPDIRECT3D9 g_pD3D = NULL;//Direct3D9 LPDIRECT3DDEVICE9 g_pd3dDevice = NULL;//レンダリングデバイス //------------------------------------------------------------- // 頂点フォーマット //------------------------------------------------------------- #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE) struct CUSTOMVERTEX{ FLOAT x, y, z; // スクリーン座標での位置 DWORD color; }; LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL;//頂点バッファ // ★ 頂点シェーダ LPDIRECT3DVERTEXSHADER9 m_pVertexShader=NULL; // ★ 頂点シェーダ LPDIRECT3DVERTEXDECLARATION9 m_pVertexDeclaration; // ★ 頂点宣言 HWND hwnd; HRESULT Init() { HRESULT hr; LPD3DXBUFFER pCode; // --------------------------------------------------------- // ★ 頂点シェーダの作成 // --------------------------------------------------------- // 頂点宣言オブジェクトの生成 D3DVERTEXELEMENT9 decl[] = { { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 }, D3DDECL_END() }; if( FAILED( hr = g_pd3dDevice- CreateVertexDeclaration( decl, m_pVertexDeclaration ) ) ) { return hr; } // シェーダを読み込む if( FAILED( hr = D3DXAssembleShaderFromFileA( VertexShader.vsh , NULL, NULL, 0, pCode, NULL ))) { return hr; } // 頂点シェーダの生成 hr = g_pd3dDevice- CreateVertexShader( (DWORD*)pCode- GetBufferPointer(), m_pVertexShader ); pCode- Release(); // 頂点と色情報 CUSTOMVERTEX vertices[] = { // x, y, z, {-0.5f, +0.5f, 0, 0xffffff00,}, {+0.5f, +0.5f, 0, 0xffffff00,}, {-0.5f, -0.5f, 0, 0xffffff00,}, {+0.5f, -0.5f, 0, 0xffffff00,}, }; // 頂点バッファを生成する if( FAILED( g_pd3dDevice- CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX), // 頂点バッファのサイズ 0, D3DFVF_CUSTOMVERTEX, // 使用法、頂点フォーマット D3DPOOL_DEFAULT, // メモリクラス g_pVB, NULL ))) // 頂点バッファリソース 予約済 return E_FAIL; // 頂点バッファに情報を格納する VOID* pVertices; if(FAILED( g_pVB- Lock(0, sizeof(vertices), (void**) pVertices, 0))) return E_FAIL; memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB- Unlock(); return true; } void FrameUpDate() { D3DXMATRIXA16 mat,matView,matProj; // ビュー行列の設定 D3DXVECTOR3 vEye = D3DXVECTOR3( 0.0f, 0.0f, 1.0f ); D3DXVECTOR3 vAt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); D3DXVECTOR3 vUp = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); D3DXMatrixLookAtRH( matView, vEye, vAt, vUp ); // 射影行列の生成 D3DXMatrixPerspectiveFovRH( matProj, D3DXToRadian(60.0f), 1.4f, 0.1f, 1000.0f ); D3DXMatrixMultiply( mat, matView, matProj ); // ★ 座標変換の定数レジスタの設定 D3DXMatrixMultiply( mat, matView, matProj ); D3DXMatrixTranspose( mat, mat );// 転置行列の作成 g_pd3dDevice- SetVertexShaderConstantF(0, (float*) mat, 4); // ★ 頂点色の定数レジスタの設定 float color[] = {1.0f, 0.0f, 0.0f, 1.0f};// 赤色 g_pd3dDevice- SetVertexShaderConstantF(4, (float*) color, 1); } void ScreenDraw() { // 画面をクリアする g_pd3dDevice- Clear( 0L, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0x000000ff, 1.0f, 0L ); //シーンの開始 if(SUCCEEDED(g_pd3dDevice- BeginScene())) { // ★頂点シェーダの設定 g_pd3dDevice- SetVertexDeclaration(m_pVertexDeclaration); g_pd3dDevice- SetVertexShader( m_pVertexShader ); //ストリームソースのセット g_pd3dDevice- SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) ); //FVFのセット g_pd3dDevice- SetFVF( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice- DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 ); //シーンの終了 g_pd3dDevice- EndScene(); } //バックバッファを表画面に反映させる g_pd3dDevice- Present( NULL, NULL, NULL, NULL ); } void GetFPS() { FrameUpDate(); ScreenDraw(); Sleep(16); } DWORD WINAPI MainLoop(LPVOID vdParam) { while(TRUE){ GetFPS(); } return 0; } HRESULT InitD3D( HWND hWnd ) { if(NULL==(g_pD3D=Direct3DCreate9(D3D_SDK_VERSION))){return E_FAIL;} D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; d3dpp.BackBufferCount = 1; d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE; d3dpp.MultiSampleQuality = 0; d3dpp.EnableAutoDepthStencil = TRUE; d3dpp.AutoDepthStencilFormat = D3DFMT_D16; d3dpp.hDeviceWindow = hWnd; d3dpp.Flags = 0; d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE ; if(FAILED(g_pD3D- CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING, d3dpp, g_pd3dDevice))){ if(FAILED(g_pD3D- CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING, d3dpp, g_pd3dDevice))){ return(E_FAIL); } } g_pd3dDevice- SetRenderState( D3DRS_LIGHTING, false ); Init(); return S_OK; } LRESULT CALLBACK MsgProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) { switch (msg) { case WM_DESTROY PostQuitMessage(0); return 0; } return DefWindowProc(hwnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,PSTR lpCmdLine , int nCmdShow ) { MSG msg; DWORD dwID; WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L Window1 , NULL }; RegisterClassEx( wc ); RECT rect; SetRect( rect,0,0,WINDOW_WIDTH,WINDOW_HEIGHT); AdjustWindowRect( rect, WS_OVERLAPPEDWINDOW, FALSE); SetRect( rect,0,0,rect.right-rect.left,rect.bottom-rect.top); hwnd = CreateWindow( L Window1 , L Shader , WS_OVERLAPPEDWINDOW ~WS_THICKFRAME ~WS_MAXIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, rect.right, rect.bottom, NULL, NULL, wc.hInstance, NULL ); if (hwnd == NULL) return 0; timeBeginPeriod(1); if(SUCCEEDED(InitD3D(hwnd))){ ShowWindow(hwnd,SW_SHOWDEFAULT); UpdateWindow(hwnd); CreateThread(NULL , 0 , MainLoop , (LPVOID)hwnd , 0 , dwID); while (GetMessage( msg , NULL , 0 , 0 )) { TranslateMessage( msg); DispatchMessage( msg); } } UnregisterClass(L Window1 ,wc.hInstance); timeEndPeriod(1); // ★ 頂点シェーダの開放 SAFE_RELEASE( m_pVertexShader ); SAFE_RELEASE( m_pVertexDeclaration ); SAFE_RELEASE(g_pVB); SAFE_RELEASE(g_pd3dDevice); SAFE_RELEASE(g_pD3D); return 0; }