• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by fireArchMage23 · Nov 24, 2015 at 08:15 PM · shaderarrayerror messagefor-loopout of bounds

What is the problem with the loop?

I am programming a shader and I am getting an array index out of bounds error. The error is at :

     LightInfo lt;
 IlluminationResult illumTotal;
 int lighttemp = lights.Length;
 for (int i = 0 ; i < lighttemp; i++) {
     // Get the light informatio from i:th light
     lt.P = lights[i].get_position(mtl); // error line**
     lt.D = lights[i].get_direction(mtl); 
      ....
     }

I have followed the code back and I can't find an error.

Comment
Add comment · Show 6
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image say_forever · Nov 25, 2015 at 03:34 AM 0
Share

may you check Debug.Log(lights.Length);

avatar image fireArchMage23 say_forever · Nov 25, 2015 at 04:00 AM 0
Share

it says that there is an undeclared identifier when I add the debug statement.

avatar image say_forever fireArchMage23 · Nov 25, 2015 at 04:17 AM 0
Share

could you provide code line about lights?

avatar image fireArchMage23 say_forever · Nov 26, 2015 at 06:52 AM 0
Share

@say_forever : the code where lights[] is used is as follows from top to bottom in actual shader

 ...
     _L0Pos ("Point 0 Position", vector) = (-0.5, 2.0, 1.25)
     ...
 uniform float3 _L0Pos;
     ....
             struct SurfaceInfo
             {
                 float3 P; // position of vertex/point in world space
                 float3 LPos; // position of vertex/point in object space
                 float3 NL; // position of vertex/point Normal in object space
                 float3 N; // normal of vertex/point in world space
                 float3 T; // tangent of vertex/point in world space
                 float3 B; // binormal of vertex/point in world space
                 float3 UV;
             };
             ...
             struct FXComposerPointLight
             {
                 float3 get_position(SurfaceInfo mtl) {
                     return _L0Pos;
                 }
             
                 float3 get_direction(SurfaceInfo mtl) {
                     return normalize(get_position(mtl) - mtl.P);
                 }
             
                 float4 get_ambient() {
                     return float4(0,0,0,0);
                 }
             
                 float4 get_diffuse() {
                     return _L0Color;
                 }
             
                 float4 get_specular() {
                     return _L0Color;
                 }
             
                 float get_attenuation(SurfaceInfo mtl) {
                     return 1.0;
                 }
             };
     
             ....
             //$$anonymous$$aterial information
                SurfaceInfo mtl;
             mtl.N = N;
             mtl.P = P;
             mtl.T = T;
             mtl.B = B;
             mtl.LPos = LPos;
             mtl.NL = NL;
             
             
             // Combine all lights
             LightInfo lt;
             Illu$$anonymous$$ationResult illumTotal;
             int lighttemp = lights.Length;
             //Debug.Log(lights.Length);
             for (int i = 0 ; i < lighttemp; i++) {
                 log(lights.Length);
                 // Get the light informatio from i:th light
                 lt.P = lights[i].get_position(mtl);
                 lt.D = lights[i].get_direction(mtl);
                 
                 // Calculate how much these lights contribute light to this point and add it to illumTotal 
                 Illu$$anonymous$$ationResult illumSingle = illu$$anonymous$$ate(lt, mtl, camera);
                 illumTotal.Amb += illumSingle.Amb;
                 illumTotal.Diff += illumSingle.Diff;
                 illumTotal.HardGloss += illumSingle.HardGloss;
                 illumTotal.SoftGloss += illumSingle.SoftGloss; 
             }    
             FXComposerPointLight lights[1];

when it references get_position it is referencing FXComposerPointLight and mtl variable references SurfaceInfo.

avatar image say_forever · Nov 30, 2015 at 08:02 AM 0
Share

did not see definition of light[], probably, I guess you do not define like

 Light[] light = new Light[10];
avatar image fireArchMage23 say_forever · Nov 30, 2015 at 03:19 PM 0
Share

@say_forever lights[] is defined as: FXComposerPointLight lights[1];

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

41 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Creating triangles around a mesh using an array of vertices 1 Answer

index out of range problem with for loops and arrays. 1 Answer

Array index is out of range? 1 Answer

Same for each loop with multiple arrays? 1 Answer

Transform Child Out of Bounds Error 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges