質問編集履歴

4

文章を修正

2021/12/21 02:52

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 提示画像ですが板ポリにPhongのシェーディングを行いたいのですが上手く反射が付きません。これは何が原因なのでしょうか?シェーダーは参考サイトを移しました。値を変えると見え方は変わるのですが光沢描画がされず、またライトの座標を(0,1000,-500)といったオブジェクトのずっと上で先の座標を指定しましたが見え方が同じです。下記の実現したいこと部の右の画像ような光沢を出したいです。
1
+ 提示画像ですが板ポリにPhongのシェーディングを行いたいのですが上手く反射が付きません。シェーダーは参考サイトを移しました。またライトの座標を(0,1000,-500)といったオブジェクトのずっと上で先の座標を指定しましたが見え方が同じです。下記の実現したいこと部の右の画像ような光沢を出したいです。
2
2
 
3
3
 
4
4
 
@@ -20,6 +20,10 @@
20
20
 
21
21
  ライト座標をスプライトに限りなく近ずけた。
22
22
 
23
+ 板ポリを適当な角度に回転させて光沢が出るかどうか確認
24
+
25
+
26
+
23
27
 
24
28
 
25
29
 
@@ -338,99 +342,201 @@
338
342
 
339
343
 
340
344
 
341
- setPosition(position);
345
+ setPosition(position); //
346
+
347
+ setScale(glm::vec2(100,100)); //スケール
348
+
349
+ setRotate(pi); //回転
350
+
351
+ pi += PI / 100;
352
+
353
+
354
+
355
+ //描画
356
+
357
+
358
+
359
+ shaderTexture.setUniform3f("uLightPosition", glm::vec3(0, 100, -200));
360
+
361
+ //shaderTexture.setUniform3f("uLightPosition", glm::vec3(0, 0, 10));
362
+
363
+
364
+
365
+ shaderTexture.setUniform3f("uLightColor", glm::vec3(1, 1, 1));
366
+
367
+ shaderTexture.setUniform3f("uObjectColor", glm::vec3(1, 0, 0));
368
+
369
+ shaderTexture.setUniform3f("uViewPosition", glm::vec3(0, 0, 10));
370
+
371
+ shaderTexture.setUniform1f("uAmbientStrength",0.2f);
372
+
373
+ shaderTexture.setUniform1f("uSpecularStrength",0.5);
374
+
375
+ shaderTexture.setUniform1f("uShininessStrength",32.0);
376
+
377
+
378
+
379
+ shaderTexture.setUniformMatrix4fv("uTranslate",getMatTranslation());
380
+
381
+ shaderTexture.setUniformMatrix4fv("uRotate", getMatRotate());
382
+
383
+ shaderTexture.setUniformMatrix4fv("uScale", getMatScale());
384
+
385
+ shaderTexture.setUniformMatrix4fv("uViewProjection", projection);
386
+
387
+ //shaderTexture.setUniformMatrix4fv("uViewProjection", glm::ortho(0.0f, (float)FrameWork::windowContext->getSize().x, 0.0f, (float)FrameWork::windowContext->getSize().y));
388
+
389
+ //printf("%d\n",textureID.at(texNum));
390
+
391
+
392
+
393
+ //glActiveTexture(GL_TEXTURE0); //テクスチャ有効
394
+
395
+ //glBindTexture(GL_TEXTURE_2D, textureID.at(texNum)); //テクスチャバインド
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+ glDrawArrays(GL_TRIANGLES, 0, vertex->size()); //描画
404
+
405
+
406
+
407
+ //バインド解除
408
+
409
+ glBindVertexArray(0);
410
+
411
+ glBindBuffer(GL_ARRAY_BUFFER, 0);
412
+
413
+ //glBindTexture(GL_TEXTURE_2D, 0);
414
+
415
+
416
+
417
+ shaderTexture.setDisable();
418
+
419
+ }
420
+
421
+ ```
422
+
423
+
424
+
425
+ ##### GLSL
426
+
427
+ ```
428
+
429
+ /*#########################################################################
430
+
431
+ # フラグメントシェーダー
432
+
433
+ ###########################################################################*/
434
+
435
+ #version 420
436
+
437
+ //#extension GL_ARB_explicit_uniform_location : require
438
+
439
+
440
+
441
+ layout(location = 2) in vec3 vPosition;
442
+
443
+ layout(location = 3) in vec3 vNormal;
444
+
445
+
446
+
447
+
448
+
449
+ uniform vec3 uLightPosition; //ライト座標
450
+
451
+ uniform vec3 uLightColor; //ライト色
452
+
453
+ uniform vec3 uObjectColor; //オブジェクトの色
454
+
455
+ uniform vec3 uViewPosition; //カメラ座標
456
+
457
+
458
+
459
+ uniform float uAmbientStrength; //環境光の強さ
460
+
461
+ uniform float uSpecularStrength; //鏡面反射の強さ
462
+
463
+ uniform float uShininessStrength; //反射輝度の強さ
464
+
465
+
466
+
467
+ layout (location = 0) out vec4 fragColor;
468
+
469
+
470
+
471
+ //out vec4 fragment;
472
+
473
+
474
+
475
+ void main()
476
+
477
+ {
342
478
 
343
479
 
344
480
 
345
- //setScale(s + glm::vec2(end - start)); //スケール
346
-
347
- setScale(glm::vec2(100,100)); //スケール
348
-
349
- setRotate(PI / 4); //回転
350
-
351
-
352
-
353
- //描画
354
-
355
-
356
-
357
- shaderTexture.setUniform3f("uLightPosition", glm::vec3(0, 0, 0));
358
-
359
- //shaderTexture.setUniform3f("uLightPosition", glm::vec3(0, 0, 10));
360
-
361
-
362
-
363
- shaderTexture.setUniform3f("uLightColor", glm::vec3(1, 1, 1));
364
-
365
- shaderTexture.setUniform3f("uObjectColor", glm::vec3(1, 0, 0));
366
-
367
- shaderTexture.setUniform3f("uViewPosition", glm::vec3(0, 0, 10));
368
-
369
-
370
-
371
- shaderTexture.setUniform1f("uAmbientStrength", 1.5);
372
-
373
- shaderTexture.setUniform1f("uSpecularStrength",0.5);
374
-
375
- shaderTexture.setUniform1f("uShininessStrength",256.0);
376
-
377
-
378
-
379
- shaderTexture.setUniformMatrix4fv("uTranslate",getMatTranslation());
380
-
381
- shaderTexture.setUniformMatrix4fv("uRotate", getMatRotate());
382
-
383
- shaderTexture.setUniformMatrix4fv("uScale", getMatScale());
384
-
385
- shaderTexture.setUniformMatrix4fv("uViewProjection", projection);
386
-
387
- //shaderTexture.setUniformMatrix4fv("uViewProjection", glm::ortho(0.0f, (float)FrameWork::windowContext->getSize().x, 0.0f, (float)FrameWork::windowContext->getSize().y));
388
-
389
- //printf("%d\n",textureID.at(texNum));
390
-
391
-
392
-
393
- //glActiveTexture(GL_TEXTURE0); //テクスチャ有効
394
-
395
- //glBindTexture(GL_TEXTURE_2D, textureID.at(texNum)); //テクスチャバインド
396
-
397
-
398
-
399
-
400
-
401
-
402
-
403
- glDrawArrays(GL_TRIANGLES, 0, vertex->size()); //描画
404
-
405
-
406
-
407
- //バインド解除
408
-
409
- glBindVertexArray(0);
410
-
411
- glBindBuffer(GL_ARRAY_BUFFER, 0);
412
-
413
- glBindTexture(GL_TEXTURE_2D, 0);
414
-
415
-
416
-
417
- shaderTexture.setDisable();
481
+ // ambient
482
+
483
+ // float ambientStrength = 0.1;
484
+
485
+ vec3 ambient = uAmbientStrength * uLightColor;
486
+
487
+
488
+
489
+ // diffuse
490
+
491
+ vec3 norm = normalize(vNormal);
492
+
493
+ vec3 lightDir = normalize(uLightPosition - vPosition);
494
+
495
+ float diff = max(dot(norm, lightDir), 0.0);
496
+
497
+ vec3 diffuse = diff * uLightColor;
498
+
499
+
500
+
501
+ // specular
502
+
503
+ //float specularStrength = 0.5;
504
+
505
+ vec3 viewDir = normalize(uViewPosition - vPosition);
506
+
507
+ vec3 reflectDir = reflect(-lightDir, norm);
508
+
509
+ //float uShininessStrength = 32;
510
+
511
+
512
+
513
+ float spec = pow(max(dot(viewDir, reflectDir), 0.0), uShininessStrength);
514
+
515
+ vec3 specular = uSpecularStrength * spec * uLightColor;
516
+
517
+
518
+
519
+
520
+
521
+ vec3 result = (ambient + diffuse + specular) * uObjectColor;
522
+
523
+ fragColor = vec4(result, 1.0);
418
524
 
419
525
  }
420
526
 
421
527
 
422
528
 
529
+
530
+
423
531
  ```
424
532
 
425
533
 
426
534
 
427
- ##### GLSL
428
-
429
535
  ```
430
536
 
431
537
  /*#########################################################################
432
538
 
433
- # フラグメントシェーダー
539
+ # 頂点シェーダー
434
540
 
435
541
  ###########################################################################*/
436
542
 
@@ -440,37 +546,33 @@
440
546
 
441
547
 
442
548
 
549
+
550
+
551
+ layout(location = 0) in vec3 vertexPosition;
552
+
553
+ layout(location = 1) in vec3 vertexNormal;
554
+
555
+
556
+
557
+ uniform mat4 uTranslate;
558
+
559
+ uniform mat4 uRotate;
560
+
561
+ uniform mat4 uScale;
562
+
563
+ uniform mat4 uViewProjection;
564
+
565
+
566
+
567
+
568
+
443
- layout(location = 2) in vec3 vPosition;
569
+ layout(location = 2) out vec3 vPosition;
444
-
570
+
445
- layout(location = 3) in vec3 vNormal;
571
+ layout(location = 3) out vec3 vNormal;
446
-
447
-
448
-
449
-
450
-
451
- uniform vec3 uLightPosition; //ライト座標
572
+
452
-
453
- uniform vec3 uLightColor; //ライト色
573
+
454
-
455
- uniform vec3 uObjectColor; //オブジェクトの色
574
+
456
-
457
- uniform vec3 uViewPosition; //カメラ座標
575
+
458
-
459
-
460
-
461
- uniform float uAmbientStrength; //環境光の強さ
462
-
463
- uniform float uSpecularStrength; //鏡面反射の強さ
464
-
465
- uniform float uShininessStrength; //反射輝度の強さ
466
-
467
-
468
-
469
- layout (location = 0) out vec4 fragColor;
470
-
471
-
472
-
473
- //out vec4 fragment;
474
576
 
475
577
 
476
578
 
@@ -478,126 +580,22 @@
478
580
 
479
581
  {
480
582
 
583
+ vec4 vertex = vec4(vertexPosition,1.0);
584
+
585
+ mat4 model = uTranslate * uRotate * uScale;
586
+
481
587
 
482
588
 
483
- // ambient
589
+
484
-
485
- // float ambientStrength = 0.1;
590
+
486
-
487
- vec3 ambient = uAmbientStrength * uLightColor;
488
-
489
-
490
-
491
- // diffuse
492
-
493
- vec3 norm = normalize(vNormal);
494
-
495
- vec3 lightDir = normalize(uLightPosition - vPosition);
496
-
497
- float diff = max(dot(norm, lightDir), 0.0);
498
-
499
- vec3 diffuse = diff * uLightColor;
500
-
501
-
502
-
503
- // specular
504
-
505
- //float specularStrength = 0.5;
506
-
507
- vec3 viewDir = normalize(uViewPosition - vPosition);
591
+ vPosition = vec3(model * vec4(vertexPosition,1.0));
508
-
509
- vec3 reflectDir = reflect(-lightDir, norm);
592
+
510
-
511
- //float uShininessStrength = 32;
512
-
513
-
514
-
515
- float spec = pow(max(dot(viewDir, reflectDir), 0.0), uShininessStrength);
516
-
517
- vec3 specular = uSpecularStrength * spec * uLightColor;
518
-
519
-
520
-
521
-
522
-
523
- vec3 result = (ambient + diffuse + specular) * uObjectColor;
593
+ vNormal = mat3(transpose(inverse(model))) * vertexNormal;
524
-
594
+
595
+
596
+
525
- fragColor = vec4(result, 1.0);
597
+ gl_Position = (uViewProjection * model) * vertex;
526
598
 
527
599
  }
528
600
 
529
-
530
-
531
-
532
-
533
601
  ```
534
-
535
-
536
-
537
- ```
538
-
539
- /*#########################################################################
540
-
541
- # 頂点シェーダー
542
-
543
- ###########################################################################*/
544
-
545
- #version 420
546
-
547
- //#extension GL_ARB_explicit_uniform_location : require
548
-
549
-
550
-
551
-
552
-
553
- layout(location = 0) in vec3 vertexPosition;
554
-
555
- layout(location = 1) in vec3 vertexNormal;
556
-
557
-
558
-
559
- uniform mat4 uTranslate;
560
-
561
- uniform mat4 uRotate;
562
-
563
- uniform mat4 uScale;
564
-
565
- uniform mat4 uViewProjection;
566
-
567
-
568
-
569
-
570
-
571
- layout(location = 2) out vec3 vPosition;
572
-
573
- layout(location = 3) out vec3 vNormal;
574
-
575
-
576
-
577
-
578
-
579
-
580
-
581
- void main()
582
-
583
- {
584
-
585
- vec4 vertex = vec4(vertexPosition,1.0);
586
-
587
- mat4 model = uTranslate * uRotate * uScale;
588
-
589
-
590
-
591
-
592
-
593
- vPosition = vec3(model * vec4(vertexPosition,1.0));
594
-
595
- vNormal = mat3(transpose(inverse(model))) * vertexNormal;
596
-
597
-
598
-
599
- gl_Position = (uViewProjection * model) * vertex;
600
-
601
- }
602
-
603
- ```

3

文章を修正

2021/12/21 02:52

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 板ポリをPhongシェーダーさせたいが反射が付かない原因が知りたい。
1
+ 板ポリをPhongシェーダーさせたいが光沢が付かない原因が知りたい。
test CHANGED
@@ -1,6 +1,10 @@
1
- 提示画像ですが板ポリにPhongのシェーディングを行いたいのですが上手く反射が付きません。これは何が原因なのでしょうか?シェーダーは参考サイトを移しました。値を変えると見え方は変わるのですが反射描画がされず、またライトの座標を(0,1000,-500)といったオブジェクトのずっと上で先の座標を指定しましたが見え方が同じです。
1
+ 提示画像ですが板ポリにPhongのシェーディングを行いたいのですが上手く反射が付きません。これは何が原因なのでしょうか?シェーダーは参考サイトを移しました。値を変えると見え方は変わるのですが光沢描画がされず、またライトの座標を(0,1000,-500)といったオブジェクトのずっと上で先の座標を指定しましたが見え方が同じです。下記の実現したいこと部の右の画像ような光沢を出したいです。
2
-
3
-
2
+
3
+
4
+
5
+
6
+
7
+
4
8
 
5
9
 
6
10
 
@@ -12,7 +16,17 @@
12
16
 
13
17
 
14
18
 
15
-
19
+ #####試したこと
20
+
21
+ ライト座標をスプライトに限りなく近ずけた。
22
+
23
+
24
+
25
+
26
+
27
+ #####実現したいこと(右の画像部ような)
28
+
29
+ ![イメージ説明](14ce10c66067e76360fe04c5257f5ee3.jpeg)
16
30
 
17
31
 
18
32
 

2

タイトルを文章を修正

2021/12/21 01:33

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 板ポリをPhongシェーダーさせたいが陰影が付かない原因が知りたい。
1
+ 板ポリをPhongシェーダーさせたいが反射が付かない原因が知りたい。
test CHANGED
@@ -1,4 +1,4 @@
1
- 提示画像ですが板ポリにPhongのシェーディングを行いたいのですが上手く陰影が付きません。これは何が原因なのでしょうか?シェーダーは参考サイトを移しました。値を変えると見え方は変わるのですが反射描画がされず、またライトの座標を(0,1000,-500)といったオブジェクトのずっと上で先の座標を指定しましたが見え方が同じです。
1
+ 提示画像ですが板ポリにPhongのシェーディングを行いたいのですが上手く反射が付きません。これは何が原因なのでしょうか?シェーダーは参考サイトを移しました。値を変えると見え方は変わるのですが反射描画がされず、またライトの座標を(0,1000,-500)といったオブジェクトのずっと上で先の座標を指定しましたが見え方が同じです。
2
2
 
3
3
 
4
4
 

1

文章を修正

2021/12/20 08:08

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 提示画像ですが板ポリにPhongのシェーディングを行いたいのですが上手く陰影が付きません。これは何が原因なのでしょうか?シェーダーは参考サイトを移しました。値を変えると見え方は変わるのですが反射描画がされず、またライトの座標を(0,1000,-500)といったオブジェクトのずっと上で先の座標をしてしましたが見え方が同じです。
1
+ 提示画像ですが板ポリにPhongのシェーディングを行いたいのですが上手く陰影が付きません。これは何が原因なのでしょうか?シェーダーは参考サイトを移しました。値を変えると見え方は変わるのですが反射描画がされず、またライトの座標を(0,1000,-500)といったオブジェクトのずっと上で先の座標を指定しましたが見え方が同じです。
2
2
 
3
3
 
4
4